我有两张桌子。
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。
即使这些项目是从前两个开始的,但我仍然希望得到那个不完整的。
答案 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)
答案 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表。
此致