Sql 选择DISTINCT with ORDER BY and CASE WHEN

Sql 选择DISTINCT with ORDER BY and CASE WHEN,sql,sql-server,sql-order-by,distinct,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. 我看到了这个

我的问题是:

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.
我看到了这个问题的答案:


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

使用聚合:

SELECT LanguageCode
FROM myTable
GROUP BY LanguageCode
ORDER BY (CASE WHEN LanguageCode = 'GB' THEN 0 ELSE 1 END), 
         LanguageCode
有些数据库对按排序的非聚合表达式很挑剔。如果这里是这种情况,那么您可以使用:

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

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

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

用你正在使用的数据库标记你的问题。这显然是一个bug
LanguageCode
确实出现在选择列表中,因此您应该能够根据此列和基于此列的表达式进行排序。在我这方面仍然存在相同的错误:/(我添加了一个您在MAX中缺少的括号)@JBHurteaux。
分组依据
查询无法生成有关
选择不同
的错误。该构造未在查询中使用。