SQL 服务器:AdventureWorks 需要帮助! Select 订单日期为

SQL Server : AdventureWorks Need HELP! Select Customers where order date is

我正在使用 AdventureWorks2017 数据库。

我需要 select customerIDyearordersQTY 对于在 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;

您可以使用 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