Если в задаче требуется для каждого элемента списка одной таблицы найти список строк из другой таблицы, например, для каждого продавца показать три его любимых города или вывести для каждого продавца три его последних заказа за 1998 год.
SELECT FirstName+ ' ' + LastName, MyList.*
-- FROM Employees E CROSS APPLY
FROM Employees E OUTER APPLY -- Выберем OUTER APPLY, чтобы увидеть еще и нулевые записи NULL для тех, кто не отправлял вообще ничего в свой город
(
SELECT TOP (3) WITH TIES OrderID
FROM Orders
WHERE EmployeeID = E.EmployeeID
AND ShipCITY=E.City
ORDER BY OrderDate ASC
) MyList
Order by FirstName+ ' ' + LastName
При этом учитывайте, что CROSS APPLY аналогичен INNER JOIN, а OUTER APPLY - LEFT JOIN
вывести для каждого продавца три его последних заказа за 1998 год.
Подготовим подзапрос
для определения 3 последних заказов продавца 1
SELECT
TOP (3) *
FROM
Orders
WHERE
Year (OrderDate) = 1998
AND
EmployeeID = 1
ORDER
BY OrderDate DESC
Сделаем к этому
подзапросу CROSS APPLY
SELECT
*
FROM
Employees E CROSS APPLY (
SELECT TOP (3) *
FROM Orders
WHERE Year (OrderDate) = 1998
AND EmployeeID =E.EmployeeID
ORDER BY OrderDate DESC
) MyList
ORDER
BY E.EmployeeID
-- для каждого продавца показать три первых
номера заказа, которые он отправил в свой родной город
-- FROM Employees E CROSS APPLY
FROM Employees E OUTER APPLY -- Выберем OUTER APPLY, чтобы увидеть еще и нулевые записи NULL для тех, кто не отправлял вообще ничего в свой город
(
SELECT TOP (3) WITH TIES OrderID
FROM Orders
WHERE EmployeeID = E.EmployeeID
AND ShipCITY=E.City
ORDER BY OrderDate ASC
) MyList
Order by FirstName+ ' ' + LastName
No comments:
Post a Comment