2012-01-12 84 views

回答

3

当指定DISTINCT时,SQL Server只允许您在SELECT列表中允许ORDER BY列,否则未选定的列可能会有多个值映射到返回结果中的特定行。

如果您知道事实并非如此,您可以使用CTE。

;WITH CTE 
    AS (SELECT DISTINCT foo, 
         bar 
     FROM T) 
SELECT foo 
FROM CTE 
ORDER BY bar 

如果这不适合你,因为确实有每个foo多个可能bar值,则需要明确地告诉它使用订购的目的,其价值。例如改为使用GROUP BY

SELECT foo 
FROM T 
GROUP BY foo 
ORDER BY MIN(bar) 
+0

+1这是一个很好的解决方法!我会记住那一个。 – Aaron 2012-01-12 13:28:21

+0

非常感谢 – 2012-01-13 06:25:01