Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment rejoindre la première ligne

SELECT   Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM     Orders
JOIN     LineItems
ON       LineItems.LineItemGUID =
         (
         SELECT  TOP 1 LineItemGUID 
         FROM    LineItems
         WHERE   OrderID = Orders.OrderID
         )

Dans SQL Server 2005 et supérieur, vous pouvez simplement remplacer INNER JOIN avec 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

Veuillez noter que TOP 1 sans ORDER BY n'est pas déterministe :cette requête vous permettra d'obtenir un élément de campagne par commande, mais il n'est pas défini de quel élément il s'agira.

Plusieurs appels de la requête peuvent vous donner différents éléments de campagne pour la même commande, même si le sous-jacent n'a pas changé.

Si vous voulez un ordre déterministe, vous devez ajouter un ORDER BY clause à la requête la plus interne.

Exemple sqlfiddle