如何在组中筛选sql中的表

如何在组中筛选sql中的表,sql,Sql,我有两张桌子 Customer | OrderItems CustomerID CustomerName | OrderItemID OrderID CustomerID Status 1 ABC | 1 1 1 Started

我有两张桌子

Customer                      |      OrderItems

CustomerID CustomerName       |      OrderItemID OrderID   CustomerID        Status

    1          ABC            |          1          1          1            Started
                                         2          1          1            Started
                              |          3          1          1            NotStarted
现在,我想获得orderItems状态已完成的所有客户的记录。在这种情况下,表示订单不完整

因此,如果我想获得未完成订单的状态,它应该为客户1提供order1


尽管项目是从前两个开始的,但我还是想让它不完整

不确定我是否正确理解了您的意思,但这应该可以:

select OrderID, CustomerID, 
       SUM(case Status when 'NotStarted' Then 1 Else 0) NS
from OrderItems
group by OrderID, CustomerID
having NS > 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')

选择c.customerId、c.Customername、O.OrderID,从c.customerId=O.OrderID上的客户c左加入OrderItem O,其中O.Status='started'如果您只想要没有未完成订单的客户,那么这应该可以做到:

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")))));
但我遗漏了一些东西:我认为应该有一个订单表,其中包含有关订单的信息。如果您更改了一条记录的customerID,则OrderItems表中的数据将不一致,例如,对于OrderItemID=3,clientID为2。同一订单有两个不同的客户吗?我想您没有处理所有的信息,并且有一个订单表


关于,

但它确实包含一个项目的NotStarted。那么如何将其视为完整?我想知道订单是否完整。我不希望它已启动或未修复我的查询,请重试。但它确实包含一个项目的NotStarted。那么如何将此视为完成?我想知道订单是否完整。我不想要那是开始还是结束not@AnalKukadiya现在我想我理解了您的问题,请尝试更新的sqlWill I require group by子句?您可以分别添加表的必填字段
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")))));