Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como entrar na primeira linha

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

No SQL Server 2005 e acima, você pode substituir INNER JOIN com 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

Observe que TOP 1 sem ORDER BY não é determinístico:nesta consulta você obterá um item de linha por pedido, mas não está definido qual será.

Várias invocações da consulta podem fornecer itens de linha diferentes para o mesmo pedido, mesmo que o subjacente não tenha sido alterado.

Se você quiser uma ordem determinística, você deve adicionar um ORDER BY cláusula para a consulta mais interna.

Exemplo sqlfiddle