如何在组中筛选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")))));