SQL顺序按特定值

问题描述

我在sql SERVER DB中具有以下数据

enter image description here

需要订购。

应根据特定的优先级值进行排序

  • 优先级1,2,3,...的第一个升序值
  • 第二个优先级为0的行显示在最后

按优先级排序后,具有相同优先级的行将按字母顺序排序

所以预期的输出

enter image description here

我已经完成了以下代码

SELECT SERVICELONGNAME,SERVICEPRIORITYID FROM SERVICE

ORDER BY  

  CASE  
            WHEN SERVICEPRIORITYID > 0 THEN 0 ELSE 1   
            END,SERVICELONGNAME ASC
enter code here

但是在这种情况下,优先级为0的行显示底部,但对于SERVICEPRIORITYID 1、2、3、4,则将其弄乱了。

请有人告诉我需要进行哪些更改才能与所需的输出相匹配?

解决方法

尝试一下

SELECT SERVICELONGNAME,SERVICEPRIORITYID
FROM SERVICE
ORDER BY CASE 
        WHEN SERVICEPRIORITYID > 0
            THEN SERVICEPRIORITYID
        ELSE 2147483647 -- Int max value
        END,SERVICELONGNAME ASC enter code here

SERVICEPRIORITYID大于0时,按SERVICEPRIORITYID排序,否则按int最大值排序。

,

您可以尝试以下-

SELECT SERVICELONGNAME,SERVICEPRIORITYID 
FROM SERVICE
ORDER BY  CASE  
            WHEN SERVICEPRIORITYID=0 THEN 1 ELSE 0 END,SERVICELONGNAME ASC