Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak dołączyć do pierwszego rzędu

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

W SQL Server 2005 i nowszych, możesz po prostu zastąpić INNER JOIN z 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

Pamiętaj, że TOP 1 bez ORDER BY nie jest deterministyczne:w tym zapytaniu otrzymasz jeden element zamówienia na zamówienie, ale nie jest zdefiniowane, który to będzie.

Wiele wywołań zapytania może dać różne elementy zamówienia dla tego samego zamówienia, nawet jeśli podstawa się nie zmieniła.

Jeśli chcesz deterministycznego porządku, powinieneś dodać ORDER BY klauzula do najbardziej wewnętrznego zapytania.

Przykład sqlfiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Moje zapytanie Wybierz SUMA zwraca wartość null. Powinien zwrócić 0

  2. Najlepszy magazyn danych dla miliardów wierszy

  3. Odmówiono uprawnienia EXECUTE do obiektu „xxxxxxx”, bazy danych „zzzzzzz”, schematu „dbo”

  4. Potrzebujesz pomocy w obliczeniach przy użyciu dwóch zestawów danych przy użyciu Expression SSRS

  5. Uszkodzony plik eksportu SQL Server BCP?