SELECT DISTINCT with ORDER BY 和 CASE WHEN

时间:2021-03-30 15:57:28

标签: sql sql-server sql-order-by distinct

我的查询是:

SELECT DISTINCT LanguageCode
       FROM myTable
       ORDER BY (CASE WHEN LanguageCode='GB' THEN 0 ELSE 1 END), LanguageCode

目标是获取语言,但首先要获取 GB 语言。 我收到此错误:

ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

我看过这个问题的答案: Reason for - ORDER BY items must appear in the select list if SELECT DISTINCT is specified

但我仍然不明白为什么它适用于我(以及如何解决它),因为我只访问一个列。

2 个答案:

答案 0 :(得分:1)

不知何故,同事找到了一个解决方法:

SELECT DISTINCT (CASE WHEN LanguageCode='GB' THEN 0 ELSE 1 END) AS IsGB, LanguageCode
   FROM myTable
   ORDER BY IsGB ASC, LanguageCode

答案 1 :(得分:0)

改为使用聚合:

SELECT LanguageCode
FROM myTable
GROUP BY LanguageCode
ORDER BY (CASE WHEN LanguageCode = 'GB' THEN 0 ELSE 1 END), 
         LanguageCode

有些数据库对 ORDER BY 中的非聚合表达式很挑剔。如果是这种情况,那么您可以使用:

SELECT LanguageCode
FROM myTable
GROUP BY LanguageCode
ORDER BY MAX(CASE WHEN LanguageCode = 'GB' THEN 0 ELSE 1 END), 
         LanguageCode
相关问题