问题描述
我在sql SERVER DB中具有以下数据
需要订购。
应根据特定的优先级值进行排序
按优先级排序后,具有相同优先级的行将按字母顺序排序
所以预期的输出是
我已经完成了以下代码
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