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