Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да се присъединя към първия ред

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

В SQL Server 2005 и по-нови, можете просто да замените INNER JOIN с 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

Моля, имайте предвид, че TOP 1 без ORDER BY не е детерминистична:с тази заявка ще получите по един ред на поръчка, но не е дефинирано коя ще бъде.

Множеството извиквания на заявката могат да ви дадат различни договорени позиции за една и съща поръчка, дори ако основната не се е променила.

Ако искате детерминиран ред, трябва да добавите ORDER BY клауза към най-вътрешната заявка.

Пример 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. Календарна таблица за Data Warehouse

  2. Преструктуриране и реорганизиране на индекса на SQL Server

  3. Индексите на SQL Server - нарастващи или низходящи, каква разлика има?

  4. SQL грешка с подреждане по в подзаявка

  5. Възможно ли е да се конкатенират стойностите на колоните в низ с помощта на CTE?