SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
JOIN LineItems
ON LineItems.LineItemGUID =
(
SELECT TOP 1 LineItemGUID
FROM LineItems
WHERE OrderID = Orders.OrderID
)
I SQL Server 2005 og nyere kan du bare erstatte INNER JOIN
med CROSS APPLY
:
SELECT Orders.OrderNumber, LineItems2.Quantity, LineItems2.Description
FROM Orders
CROSS APPLY
(
SELECT TOP 1 LineItems.Quantity, LineItems.Description
FROM LineItems
WHERE LineItems.OrderID = Orders.OrderID
) LineItems2
Bemærk venligst, at TOP 1
uden ORDER BY
er ikke deterministisk:Med denne forespørgsel får du én linjepost pr. ordre, men det er ikke defineret, hvilken det skal være.
Flere påkaldelser af forespørgslen kan give dig forskellige linjeposter for den samme ordre, selvom det underliggende ikke har ændret sig.
Hvis du ønsker deterministisk rækkefølge, bør du tilføje en ORDER BY
klausul til den inderste forespørgsel.
Eksempel sqlfiddle