sql-server - 提供在 2008 年 7 月 1 日之后订购产品 711 和 712 的客户 ID 和帐号的唯一列表
问题描述
问题来自 AdventureWorks2008R2
我试过这个查询,但我只想要同时订购产品 711 和 712 的客户。例如,客户 ID 11441 订购了产品 ID 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
的操作将不起作用。
推荐阅读
- amazon-web-services - SQS批次中的所有消息是否在达到最大redrive(Retry)策略数后都发送到Dead Letter Queue
- flutter - 有没有办法通过 rtmps 在颤振或本机应用程序中观看 Facebook 直播?
- gradle - 使 Gradle 任务对前一个任务的结果进行操作
- amazon-web-services - 针对 AWS 和 Azure 的应用程序的单一代码库,用于传递服务,例如服务总线、blob、SQS/SNS 等
- php - 是否可以在表中运行两个单独的查询?
- javascript - 根据嵌套对象数组中的深度生成节点号
- transactions - 选择性地限制对 EJB 的访问
- sql-server - 关于负数的Sql Server全文搜索:“-x”“nnx-”
- python - 将 python 字典转换为 INSERT 查询
- apache-kafka - Kafka - 如何将过期消息移动到不同的主题?