根据案例条件计算列数

时间:2020-08-19 09:11:38

标签: sql sql-server

这是代码:

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时,我才必须选择失败计数

3 个答案:

答案 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;

完整示例

Fiddle

有结果:

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
相关问题