Dit eksempel nr. 2 fik mig til at klø mig i hovedet i et stykke tid - jeg tænkte ved mig selv:"Du kan ikke DISTINCT
en enkelt kolonne, hvad ville det betyde?" - indtil jeg indså, hvad der foregår.
Når du har
SELECT DISTINCT(t.ItemNumber)
du er ikke , trods tilsyneladende, faktisk beder om distinkte værdier af t.ItemNumber
! Dit eksempel #2 bliver faktisk analyseret på samme måde som
SELECT DISTINCT
(t.ItemNumber)
,
(SELECT TOP 1 ItemDescription
FROM Transactions
WHERE ItemNumber = t.ItemNumber
ORDER BY DateCreated DESC) AS ItemDescription
FROM Transactions t
med syntaktisk korrekte, men overflødige parenteser omkring t.ItemNumber
. Det er for resultatsættet som helhed, der DISTINCT
gælder.
I dette tilfælde, da din GROUP BY
grupper efter den kolonne, der faktisk varierer, får du de samme resultater. Jeg er faktisk lidt overrasket over, at SQL Server ikke gør det (i GROUP BY
eksempel) insisterer på, at den underforespurgte kolonne er nævnt i GROUP BY
liste.