Comment joindre à la première ligne

Comment joindre à la première ligne

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

Pour les versions de SQL Server antérieures à 2005, vous devez utiliser un INNER JOIN au lieu d’un CROSS APPLY :

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

Veuillez noter que TOP 1 sans ORDER BY n’est pas déterministe : cette requête vous donnera un élément de ligne par commande, mais il n’est pas défini lequel ce sera.

Plusieurs invocations de la requête peuvent vous donner des éléments de ligne différents pour la même commande, même si les données sous-jacentes n’ont pas changé.

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

Exemple sqlfiddle