我遇到了一个很奇怪的问题,我还没有找到任何解释。使用SQL Server 2008并使用GROUP BY,它会在没有指定任何ORDER BY的情况下对我的列进行排序。这是一个演示情况的脚本。为什么SQL Server 2008在使用GROUP BY时没有指定顺序?
CREATE TABLE #Values (FieldValue varchar(50))
;WITH FieldValues AS
(
SELECT '4' FieldValue UNION ALL
SELECT '3' FieldValue UNION ALL
SELECT '2' FieldValue UNION ALL
SELECT '1' FieldValue
)
INSERT INTO #Values (FieldValue)
SELECT
FieldValue
FROM FieldValues
-- First SELECT demonstrating they are ordered DESCENDING
SELECT
FieldValue
FROM #Values
-- Second SELECT demonstrating they are ordered ASCENDING
SELECT
FieldValue
FROM #Values
GROUP BY
FieldValue
DROP TABLE #Values
第一个SELECT返回
4
3
2
1
第二个SELECT将返回
1
2
3
4
根据它指出了MSDN Documentation:“GROUP BY子句不下令结果集“
MSDN文档听起来像他们措辞不佳。它*可能会对结果集进行排序,但您最好不要对该排序做出任何*假设*。它可能在未来的版本中发生变化。或者,如答案中所述,如果您在表格中添加更多数据,甚至可能会改变。 – 2010-10-14 23:10:00