sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo unirse a la primera 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
         )

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