SQL使用更多两列带大小写

时间:2019-03-11 18:28:13

标签: sql sql-server database datatable

对于我的问题,我找不到很好的解释。

我有一张桌子:

user   | 70Y   | hospital
-------+-------+----------
1      | 18    | 1   
2      | 70    | 1 
3      | 90    | 0

我需要查找的是有多少人的70岁以上,以及是否有多少人在医院里。

我正在使用它来查找他的年龄超过70岁:

SUM(CASE WHEN 70y > 70 THEN 1 ELSE 0 END) AS 'old_person'

但是我怎么发现他在医院呢?

我期望从表中得到的是:

 | old_person | old_person_in_hospital| 
 +------------+-----------------------+
 | 18         |              1        | 

如果我想添加更多的列,比如说检查40岁的孩子,最简单的方法是什么?

我对表的期望:

             | old_person  |  40y_person         | 
             +-------------+---------------------+
             | 18          |            16       | 
in hospital  | 1           |             2       | 

3 个答案:

答案 0 :(得分:1)

每列都需要一个案例:

select 
  SUM(Case when [70y] > 70 then 1 else 0 end) old_person,
  SUM(Case when [70y] > 70 and hospital = 1 then 1 else 0 end) old_person_in_hospital
from tablename

答案 1 :(得分:0)

将其他情况用于医院计数

select SUM(Case when 70y > 70 then 1 else 0 end) as old_person,
  sum (Case when 70y > 70 and hospital=1 then 1 else 0 end ) hospital
from tbale

答案 2 :(得分:0)

如何将条件移至where子句?

select count(*) as old_person,
       sum(hospital) as old_person_in_hospital
from tablename
where [70y] > 70;

如果您想添加更多年龄段,则可以使用条件汇总。但是,我建议您改用聚合,然后将结果放在不同的行中。例如:

select (age / 10) as decade,
       count(*) as num_people,
       sum(hospital) as num_in_hospital
from tablename
group by (age / 10);