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