如何在组中的sql中过滤表

时间:2013-06-21 12:07:45

标签: sql

我有两张桌子。

Customer                      |      OrderItems

CustomerID CustomerName       |      OrderItemID OrderID   CustomerID        Status

    1          ABC            |          1          1          1            Started
                                         2          1          1            Started
                              |          3          1          1            NotStarted

现在我想获得orderItems状态为Completed的所有客户的记录。在这种情况下意味着订单不完整。

所以如果我想获得不完整订单的状态,它应该给我客户1是order1。

即使这些项目是从前两个开始的,但我仍然希望得到那个不完整的。

5 个答案:

答案 0 :(得分:0)

select OrderID, CustomerID, 
       SUM(case Status when 'NotStarted' Then 1 Else 0) NS
from OrderItems
group by OrderID, CustomerID
having NS > 0;

答案 1 :(得分:0)

不确定我是否理解正确,但这应该可以胜任:

select distinct c.CustomerId, oi.OrderId
from Customer c
inner join OrderItems oi on c.CustomerID = oi.CustomerID
where c.OrderId not in (select o.OrderId from OrderItems o where o.Status <> 'Started')

答案 2 :(得分:0)

从客户c选择c.customerId,c。客户名,O.OrderID,在C.customerID = o.OrderID上加入OrderItem O,其中o.Status ='started'

答案 3 :(得分:0)

select OrderID, CustomerID, 
       SUM(case Status when 'Started' Then 0 Else 1) NS
from OrderItems
having NS > 0;

答案 4 :(得分:0)

如果您只希望客户没有完整的订单,那么这应该可以解决问题:

SELECT C.CustomerID, C.CustomerName
FROM Customer AS C
WHERE (((C.CustomerID) Not In 
   (SELECT DISTINCT [O].CustomerID
    FROM OrderItems AS O
    WHERE ((([O].Status)="NotStarted")))));

我想念一些东西:我认为应该有一个ORDER表,其中包含有关订单的信息。如果您更改了一条记录的customerID,那么OrderItems表中的数据将会不一致,例如,对于OrderItemID = 3,clientID为2.对于同一订单,是否有两个不同的客户端?我想你没有处理所有信息,并且 是一个Order表。

此致