sql - SQL 子查询:显示购买了两件商品的 Customer_ID
问题描述
编辑:
谢谢大家。链接这两个表的应该是 CustomerID,而不是 productID。即便如此,由于 Squirrel 所说,查询没有返回任何客户 ID。这是一个糟糕的查询。我发现使用以下语法获得了更好的成功:
SELECT distinct(c.customerID)
FROM sales.customer c inner join sales.SalesOrderHeader h
on c.CustomerID = h.CustomerID
inner join sales.SalesOrderDetail l on h.SalesOrderID = l.SalesOrderID
WHERE l.ProductID IN (710, 715)
GROUP BY c.customerID
HAVING COUNT(DISTINCT l.ProductID) = 2
我正在尝试从第二个表的列中返回CustomerID
购买了具有特定ProductID
s(710 和 715)的两件商品的 s - 但尚未购买 716 的 s 。ProductID
我正在尝试将其作为子查询执行,但出现错误
SQL 错误 [207] [S0001]:列名“ProductID”无效
这是我的代码块:
SELECT
sc.customerID
FROM
sales.customer sc
WHERE
ProductID IN (SELECT ProductID
FROM sales.SalesOrderDetail sod
WHERE sod.ProductID = 710)
AND ProductID IN (SELECT ProductID
FROM sales.SalesOrderDetail sod
WHERE sod.ProductID = 715)
AND ProductID IN (SELECT ProductID
FROM sales.SalesOrderDetail sod
WHERE sod.ProductID != 716)
任何修复语法错误的帮助将不胜感激。谢谢!
解决方案
好的,但是在将来,最好提供一些数据样本,列来理解这一点。您没有显示任何销售订单如何连接到销售订单详细信息。话虽如此,我将对您拥有的内容进行有根据的猜测。
我会做一次查询并获得每个合格产品的计数......然后申请HAVING。一个人可能有多个订单,并且每个产品都可能在不同的订单上(除非您关心的都在同一个订单上,这会略有不同)。
select
SO.CustomerID
-- at THIS point, I only care did the person have any of the products
max( case when SOD.ProductID = 710 then 1 else 0 end ) as HasProduct1,
max( case when SOD.ProductID = 715 then 1 else 0 end ) as HasProduct2,
max( case when SOD.ProductID = 716 then 1 else 0 end ) as HasProduct3
from
Sales.SalesOrder SO
JOIN Sales.SalesOrderDetail SOD
on SO.SalesOrderID = SOD.SalesOrderID
group by
SO.CustomerID
having
-- NOW, we can apply the product 1 & 2 purchased, but NOT product 3
max( case when SOD.ProductID = 710 then 1 else 0 end ) = 1
AND max( case when SOD.ProductID = 715 then 1 else 0 end ) = 1
AND max( case when SOD.ProductID = 716 then 1 else 0 end ) = 0
如果您删除 HAVING 子句,您将能够看到所有客户以及他们是否有任何组合,例如只有产品 1 和 3、只有 2 或任何组合,包括没有订购任何相关产品的客户。
推荐阅读
- android - 运行apk时抛出Android错误,但不是在开发模式下
- c# - Azure 函数连接到本地 sql 访问被拒绝
- python - 数组作为张量流的输入
- discrete-mathematics - 我如何证明这个离散数学挑战?
- c# - macos 上的 CSC 没有列出 C# 9
- c - 如何在C中为二维数组的随机元素赋值
- reactjs - React:如何将值传递给我的主 App() 函数
- javascript - 如何从数据库中添加日期的月份并在网页中显示
- c++ - 哪个是在 C++ 中存储 1 个键和 2 个值的最佳数据结构
- python - 如何检查函数是否在python中返回一种类型的数据或另一种类型的数据