Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So verbinden Sie sich mit der ersten Reihe

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