检查行中的值

时间:2014-12-17 13:02:07

标签: sql

我有下表

ID  | PARCEL  | STATUS  | ORDER_ID
1     1         PENDING      1234
2     2         COMPLETE     1234
3     1         COMPLETE     9999 
4     2         PENDING      9999   
5     3         PENDING      9999
6     1         COMPLETE     1111
7     2         COMPLETE     1111
8     3         COMPLETE     1111   
9     1         COMPLETE     3333 
10    2         PENDING      3333 

我需要在第一个包裹待定并且包含多个包裹时获得结果。

我尝试使用sql:

SELECT * FROM table WHERE parcela = 1 AND status = 'pending'
group by order_id
having count(order_id) > 1

查询的答案是:

ID  | PARCEL  | STATUS  | ORDER_ID
1     1         PENDING      1234
2     2         COMPLETE     1234

1 个答案:

答案 0 :(得分:1)

您可以使用having子句获取订单:

select order_id
from table 
group by order_id
having count(order_id) > 1 AND
       sum(case when parcela = 1 AND status = 'pending' then 1 else 0 end) > 0;

如果您需要详细信息,请将表格中的行重新加入order_id

您的查询的问题是您在where子句中使用了一个过滤器,该过滤器将行限制为仅第一行。这可以防止查询计算每个顺序中的总行数。