Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Ces deux requêtes sont-elles identiques - GROUP BY ou DISTINCT ?

Votre exemple #2 m'a fait me gratter la tête pendant un moment - je me suis dit :"Vous ne pouvez pas DISTINCT une seule colonne, qu'est-ce que cela signifie ?" - jusqu'à ce que je réalise ce qui se passe.

Lorsque vous avez

SELECT DISTINCT(t.ItemNumber)

vous n'êtes pas , malgré les apparences, demandant en fait des valeurs distinctes de t.ItemNumber ! Votre exemple #2 est en fait analysé de la même manière que

SELECT DISTINCT
  (t.ItemNumber)
  ,
  (SELECT TOP 1 ItemDescription
   FROM Transactions
   WHERE ItemNumber = t.ItemNumber
   ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t

avec des parenthèses syntaxiquement correctes mais superflues autour de t.ItemNumber . C'est à l'ensemble de résultats dans son ensemble que DISTINCT s'applique.

Dans ce cas, puisque votre GROUP BY groupes par la colonne qui varie réellement, vous obtenez les mêmes résultats. Je suis en fait un peu surpris que SQL Server ne le fasse pas (dans le GROUP BY exemple) insister pour que la colonne sous-requête soit mentionnée dans le GROUP BY liste.