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.