SQL Server 2008 - 与两个条件匹配的查询

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周的客户,但不会同时拥有两周的客户.我是否需要修改我的联接以使其工作?

谢谢!

Dam*_*ver 6

要实现的关键是,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)