SQL Server: AdventureWorks нужна помощь! Выберите клиентов, где дата заказа

Я работаю с AdventureWorks2017 база данных.

Мне нужно выбрать customerID, year, а также ordersQTY для клиентов, заказавших в 2011 и 2014 годах, но не в 2012 или 2013 году.

Я пытался закодировать его с помощью предложения where, но, похоже, он работает неправильно...

WITH SalesQTY AS
(
    SELECT 
        CustomerID, YEAR(OrderDate) Y
    FROM 
        Sales.SalesOrderHeader oh
    WHERE 
        YEAR(OrderDate) IN (2011, 2014)
)
SELECT CustomerID, Y, COUNT(Y)
FROM SalesQTY s
GROUP BY CustomerID, Y;

1 ответ

Решение

Ты можешь использовать not exists сделать это.

SELECT CustomerID, YEAR(OrderDate),COUNT(*)
FROM Sales.SalesOrderHeader oh
WHERE YEAR(OrderDate) IN (2011, 2014)
AND NOT EXISTS (SELECT 1
                FROM Sales.SalesOrderHeader oh1
                WHERE oh.CustomerID=oh1.CustomerID
                AND YEAR(oh1.OrderDate) IN (2012, 2013)
               )
GROUP BY CustomerID, YEAR(OrderDate)
HAVING COUNT(DISTINCT YEAR(OrderDate)) = 2
Другие вопросы по тегам