【问题标题】:SQL order by specific valuesSQL 按特定值排序
【发布时间】:2020-09-08 08:43:02
【问题描述】:

我在 SQL SERVER DB 中有以下数据

需要订购。

根据优先级的具体值进行排序

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

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

所以预期的输出是

我已经完成了以下代码

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,它是混乱的。

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

【问题讨论】:

  • 您的查询似乎不错,但您的第二个 order bySERVICELONGNAME 而不是 SERVICEPRIORITYID
  • @HoneyBadger 这不会按字母顺序对具有相同优先级的值进行排序

标签: sql .net sql-server tsql sql-order-by


【解决方案1】:

试试这个

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 最大值排序。

【讨论】:

  • 谢谢!有点难以阅读代码,但没关系,这行得通。
【解决方案2】:

你可以试试下面的-

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

【讨论】:

  • 这仍然给出了混乱的值,但 0 在底部一行正如预期的那样
猜你喜欢
  • 2014-06-17
  • 1970-01-01
  • 2010-09-28
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 2012-01-09
相关资源
最近更新 更多