SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
JOIN LineItems
ON LineItems.LineItemGUID =
(
SELECT TOP 1 LineItemGUID
FROM LineItems
WHERE OrderID = Orders.OrderID
)
En SQL Server 2005 y superior, simplemente podría reemplazar INNER JOIN
con 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
Tenga en cuenta que TOP 1
sin ORDER BY
no es determinista:esta consulta obtendrá una línea de pedido por pedido, pero no está definido cuál será.
Múltiples invocaciones de la consulta pueden generar diferentes elementos de línea para el mismo pedido, incluso si el subyacente no cambió.
Si desea un orden determinista, debe agregar un ORDER BY
cláusula a la consulta más interna.
Ejemplo de sqlfiddle