Предоставьте уникальный список идентификаторов клиентов и номеров счетов, которые заказали продукты 711 и 712 после 1 июля 2008 г.

Вопрос от AdventureWorks2008R2

Я пробовал этот запрос, но мне нужны только клиенты, которые заказали продукты 711 и 712. Например, CustomerID 11441 заказал productid 711 и 712, поэтому будет отображаться только 11441

Select DISTINCT(oh.CustomerID), oh.AccountNumber, CAST(oh.OrderDate as DATE) OrderDates, od.ProductID
From Sales.SalesOrderHeader oh
Inner Join Sales.SalesOrderDetail od
ON od.SalesOrderID = oh.SalesOrderID
WHERE od.ProductID BETWEEN 711 AND 712
AND CAST(oh.OrderDate as DATE) > '2008-07-01'
ORDER BY oh.CustomerID 

Скриншот моего вывода

Снимок экрана с моими результатами


person Pornima Bansode    schedule 22.06.2018    source источник


Ответы (1)


SELECT
    oh.CustomerID, oh.AccountNumber,
    CAST(oh.OrderDate as DATE) OrderDates, /* doesn't really make sense as a plural */
    od.ProductID
FROM Sales.SalesOrderHeader oh
WHERE CAST(oh.OrderDate as DATE) > '2008-07-01'
AND (
        SELECT COUNT(DISTINCT ProductID)
        FROM SalesOrderDetail od
        WHERE od.SalesOrderID = oh.SalesOrderID
            AND od.ProductID IN (711, 712)
    ) = 2
ORDER BY oh.CustomerID;

Вот один из способов использования коррелированного подзапроса. Кстати, то, что вы пытались сделать с DISTINCT в исходном запросе, не сработает.

person shawnt00    schedule 22.06.2018