不确定标题是否能很好地说明这一点,但是我有一个记录表。假设我有Status
,Capture_ID
和Order_ID
列。我正在尝试获取所有Status
的列表,这些列表在订单包含的任何行中都不包含Complete
的{{1}}。每个Order_ID
可以有多个条目。
所以行看起来像:
ORDER_ID STATUS Capture_ID
1245 COMPLETE 999
1245 ASSIGNED 999
1245 FAILED 999
因此,我编写了一个查询,该查询返回的结果不包含“完成”。它只是返回失败的结果,问题是它不检查ORDER_ID
是否具有其他包含COMPLETE
的行。
Capture_ID用于跟踪订单状态。 Order_ID可能还有其他9行与其他操作有关,但是capture_ID被分配给该订单,并具有3个可能的失败,已分配,已完成条目。所有其他行的Cpature_ID将为空
答案 0 :(得分:2)
如果只希望表格中的订单,则可以使用group by
和having
:
select order_id
from t
group by order_id
having sum(case when status = 'COMPLETE' then 1 else 0 end) = 0;
如果要针对所有订单运行此命令,那么我假设您有一个orders
表。使用not exists
:
select o.*
from orders o
where not exists (select 1
from orderstatuses os
where os.order_id = o.order_id and
os.status = 'COMPLETE'
);
答案 1 :(得分:0)
我认为这个问题要求使用MINUS命令。
Select distinct(order_id)
from {table_name}
MINUS
Select distinct(order_id)
from (table_name}
where status = 'Complete'
您可以根据需要从此SQL中获取输出,并将其用于进一步的查询。