SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
JOIN LineItems
ON LineItems.LineItemGUID =
(
SELECT TOP 1 LineItemGUID
FROM LineItems
WHERE OrderID = Orders.OrderID
)
In SQL Server 2005 und höher könnten Sie einfach INNER JOIN
ersetzen mit 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
Bitte beachten Sie, dass TOP 1
ohne ORDER BY
ist nicht deterministisch:Bei dieser Abfrage erhalten Sie eine Position pro Bestellung, aber es ist nicht definiert, welche es sein wird.
Mehrere Aufrufe der Abfrage können Ihnen unterschiedliche Posten für dieselbe Bestellung liefern, selbst wenn sich der Basiswert nicht geändert hat.
Wenn Sie eine deterministische Reihenfolge wünschen, sollten Sie einen ORDER BY
hinzufügen -Klausel zur innersten Abfrage.
Beispiel sqlfiddle