如何根据一系列值编写查询以过滤表

时间:2016-01-14 04:14:29

标签: sql oracle

我有一个包含call_nostatussub_staus

列的表格

例如:记录是这样的。

call_no  status  sub_staus
123      2       null
123      79      null
123      null    119 
231      5       null
231      null    78

我需要获取状态为 79 call_no,并且sub_status 119

3 个答案:

答案 0 :(得分:0)

您可以使用聚合和having

执行此操作
select call_no
from t
group by call_no
having sum(case when status = 79 then 1 else 0 end) > 0 and
       sum(case when sub_status = 119 then 1 else 0 end) > 0;

答案 1 :(得分:0)

SELECT CALL_NO
FROM TABLE
GROUP BY CALL_NO
HAVING SUM(
  CASE
    WHEN STATUS = 79
    THEN 1
    ELSE 0
  END) > 0
AND SUM(
  CASE
    WHEN SUB_STATUS = 119
    THEN 1
    ELSE 0
  END) > 0;

答案 2 :(得分:0)

我怀疑你想要最大值 - 但这是猜测。如果您想要已经状态79和子状态119的呼叫,则使用SUM(案例....)将适用,但使用最大值可能会给您当前状态79和子状态119。

select call_no
from t
group by call_no
having max(status) = 79
   and max(sub_status) = 119;