SELECT Orders.OrderNumber, LineItems.Quantity, LineItems.Description
FROM Orders
JOIN LineItems
ON LineItems.LineItemGUID =
(
SELECT TOP 1 LineItemGUID
FROM LineItems
WHERE OrderID = Orders.OrderID
)
V SQL Server 2005 a novějších stačí nahradit INNER JOIN
pomocí 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
Vezměte prosím na vědomí, že TOP 1
bez ORDER BY
není deterministický:tento dotaz vám poskytne jednu řádkovou položku na objednávku, ale není definováno, která to bude.
Vícenásobné vyvolání dotazu vám může poskytnout různé řádkové položky pro stejnou objednávku, i když se podklad nezměnil.
Pokud chcete deterministické pořadí, měli byste přidat ORDER BY
klauzule na nejvnitřnější dotaz.
Příklad sqlfiddle