如何编写查询以根据一系列值筛选表



我有一个包含列call_nostatussub_staus 的表

例如:唱片就是这样。

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

我需要获取一个状态为79且sub_status为119

call_no

您可以使用聚合和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;
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;

我怀疑您想要最大值,但这只是猜测。如果您想要具有状态79和子状态119的呼叫,则使用SUM(case….)将适用,但使用最大值可能会导致当前处于状态79和个子状态119。

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

最新更新