提供在 2008 年 7 月 1 日之后订购了产品 711 和 712 的客户 ID 和帐号的唯一列表
Provide a unique list of customer id’s and account numbers which have ordered both products 711 and 712 after July 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
我的输出截图
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
执行的操作将不起作用。
问题来自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
我的输出截图
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
执行的操作将不起作用。