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

Sådan slutter du dig til første række

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

I SQL Server 2005 og nyere kan du bare erstatte INNER JOIN med 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

Bemærk venligst, at TOP 1 uden ORDER BY er ikke deterministisk:Med denne forespørgsel får du én linjepost pr. ordre, men det er ikke defineret, hvilken det skal være.

Flere påkaldelser af forespørgslen kan give dig forskellige linjeposter for den samme ordre, selvom det underliggende ikke har ændret sig.

Hvis du ønsker deterministisk rækkefølge, bør du tilføje en ORDER BY klausul til den inderste forespørgsel.

Eksempel sqlfiddle



  1. Activex ListView Control Tutorial-01

  2. Betydningen af ​​basislinjer

  3. Får fejl - ORA-01858:et ikke-numerisk tegn blev fundet, hvor et numerisk var forventet

  4. Skal jeg bruge !=eller <> for ikke lige i T-SQL?