这是代码:
select sum(case when status_code= '200' then 1 else 0 end) as success,
sum(case when status_code!= '200' then 1 else 0 end ) as failure from my_table
输出:
success failure
1 2
仅当失败计数为<= 5时,我才必须选择失败计数
答案 0 :(得分:2)
解决方案
添加一个having子句。
select sum(case when status_code= '200' then 1 else 0 end) as 'success',
sum(case when status_code!= '200' then 1 else 0 end) as 'failure'
from my_table
having sum(case when status_code!= '200' then 1 else 0 end) <= 5;
完整示例
有结果:
declare @my_table table
(
status_code int
);
insert into @my_table (status_code) values
(200), (1), (1); --> 2 failures
select sum(case when status_code = 200 then 1 else 0 end) as 'success',
sum(case when status_code != 200 then 1 else 0 end) as 'failure'
from @my_table
having sum(case when status_code != 200 then 1 else 0 end) <= 5;
-- RESULT (1 row)
success failure
----------- -----------
1 2
无结果:
insert into @my_table (status_code) values
(1), (1), (1), (1); --> +4 failures ==> 6 failures in total
select sum(case when status_code = 200 then 1 else 0 end) as 'success',
sum(case when status_code != 200 then 1 else 0 end) as 'failure'
from @my_table
having sum(case when status_code != 200 then 1 else 0 end) <= 5;
-- RESULT (0 rows)
答案 1 :(得分:1)
您可以尝试以下代码。
Select * from (select sum(case when status_code= '200' then 1 else 0 end) as success,
sum(case when status_code!= '200' then 1 else 0 end ) as failure from my_table ) t
where t.failure <= 5
答案 2 :(得分:1)
您可以只使用子查询:
Select * from
(
select sum(case when status_code= '200' then 1 else 0 end) as success,
sum(case when status_code!= '200' then 1 else 0 end ) as failure from my_table
) A
Where failure<=5