排序列和 0 最后出现在 case when

sort column and 0 come at last with case when

如何排序列和0最后出现在什么时候? 以下是查询:

SELECT iAdminID
     , vFirstName
     , vLastName
     , iRank 
  FROM tbl_admin 
 WHERE eDeleted = 'No' 
   AND eStatus = 'Active' 
 ORDER 
    BY CASE WHEN iAdminID = 1 
            THEN 0 
            ELSE iRank=0 END

以下是上述查询的结果:

But what I want is, first record should be as it is and others should be according to iRank (1,2,3,4,5,6,7,8,0,0,0,0)

一个简单的方法是使用多个排序级别。

你可以这样做:

order by
    case when iAdmin = 1 then 0 else 1 end,
    case when iRank = 0 then 1 else 0 end,
    iRank

在MySQL中也可以这样表示:

order by 
    (iAdmin = 1) desc,
    iRank = 0,
    iRank

最后一个选项:如果您事先知道 iRank 的上限(例如,iRank 永远不会大于 1000),那么您可以跳过一级:

order by 
    (iAdmin = 1) desc,
    case when iRank = 0 then 1000 else iRank end