这两个查询似乎返回相同的结果。那是巧合还是真的一样?
1。
SELECT t.ItemNumber, (SELECT TOP 1 ItemDescription FROM Transactions WHERE ItemNumber = t.ItemNumber ORDER BY DateCreated DESC) AS ItemDescription FROM Transactions t GROUP BY t.ItemNumber
2。
SELECT DISTINCT(t.ItemNumber), (SELECT TOP 1 ItemDescription FROM Transactions WHERE ItemNumber = t.ItemNumber ORDER BY DateCreated DESC) AS ItemDescription FROM Transactions t
有点解释:我试图从充满交易的表中获得不同的项目清单。对于每个项目,我正在寻找ItemNumber(标识字段)和最新的ItemDescription。
您的示例#2让我挠了一下头-我对自己说:“您不能发表DISTINCT任何专栏,那意味着什么?” -直到我意识到发生了什么。
DISTINCT
当你有
SELECT DISTINCT(t.ItemNumber)
你是 不是 ,尽管外表,实际上需要的不同值 的t.ItemNumber!您的示例#2实际上被解析为与
t.ItemNumber
SELECT DISTINCT (t.ItemNumber) , (SELECT TOP 1 ItemDescription FROM Transactions WHERE ItemNumber = t.ItemNumber ORDER BY DateCreated DESC) AS ItemDescription FROM Transactions t
在句法上正确但周围多余的括号t.ItemNumber。它DISTINCT适用于整个结果集。
在这种情况下,由于GROUP BY按列分组的组实际上有所不同,因此您将获得相同的结果。我实际上对SQL Server不(在GROUP BY示例中)坚持要在GROUP BY列表中提到子查询列感到有些惊讶。
GROUP BY