Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come entrare in prima fila

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

In SQL Server 2005 e versioni successive, potresti semplicemente sostituire 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

Tieni presente che TOP 1 senza ORDER BY non è deterministico:questa query ti darà un elemento pubblicitario per ordine, ma non è definito quale sarà.

Chiamate multiple della query possono darti elementi pubblicitari diversi per lo stesso ordine, anche se il sottostante non è cambiato.

Se vuoi un ordine deterministico, dovresti aggiungere un ORDER BY clausola alla query più interna.

Esempio sqlfiddle