Mik*_*ike 1 sql-server sql-server-2008
我正在努力寻找剩下几周同时拥有1和4的客户(CustomerID).我正在使用以下查询:
SELECT o.CustomerID, oi.RemainingWeeks
FROM Orders o INNER JOIN
OrderItems oi ON o.OrderID = oi.OrderID
WHERE (oi.OrderItemStatusID = 1) AND (oi.RemainingWeeks IN (1, 4))
ORDER BY o.CustomerID, oi.RemainingWeeks
Run Code Online (Sandbox Code Playgroud)
这样可以找到剩下几周或4周的客户,但不会同时拥有两周的客户.我是否需要修改我的联接以使其工作?
谢谢!
要实现的关键是,OrderItemsRemainingWeeks等于1和4都不会是单行.所以你需要以某种方式涉及多行.您可以通过聚合实现此目的,或者仅执行第二次连接:
SELECT o.CustomerID, oi1.RemainingWeeks,oi2.RemainingWeeks
FROM Orders o INNER JOIN
OrderItems oi1 ON o.OrderID = oi1.OrderID INNER JOIN
OrderItems oi2 ON o.OrderID = oi2.OrderID
WHERE (oi1.OrderItemStatusID = 1) AND (oi1.RemainingWeeks =1) AND
(oi2.OrderItemStatusID = 1) AND (oi2.RemainingWeeks =4)
ORDER BY
o.CustomerID, oi1.RemainingWeeks,oi2.RemainingWeeks
Run Code Online (Sandbox Code Playgroud)