如何在SQL中组合多个count语句

hel*_*123 1 sql sql-server select sum count

我有一个包含ID列表的表,每个ID的状态为HW,HB,PIP或TBC.

我想计算每种状态的人数,所以我会有一张表看起来像

HW HB PIP TBC

45 27 9 49

在我有的时候

    (SELECT COUNT(*) AS 'StatusHW' From HomeworkerStatus WHERE Status='Homeworker')
    UNION       
    (SELECT COUNT(*) AS 'StatusHB' From HomeworkerStatus WHERE Status='Home Based')
    UNION
    (SELECT COUNT(*) AS 'StatusPIP' From HomeworkerStatus WHERE Status='PIP') 
    UNION
    (SELECT COUNT(*) AS 'StatusTBC' From HomeworkerStatus WHERE Status='TBC')           
Run Code Online (Sandbox Code Playgroud)

这回来了

StatusHW

1 45

2 27

3 9

4 49

我也试过了

    SELECT Status,
    sum(case when Status = 'Homeworker' then 1 else 0 end) StatusHW,
    sum(case when Status = 'Home Based' then 1 else 0 end) StatusHB,
    sum(case when Status = 'PIP' then 1 else 0 end) StatusPIP,
    sum(case when Status = 'TBC' then 1 else 0 end) StatusTBC
    FROM HomeworkerStatus
    GROUP BY Status
Run Code Online (Sandbox Code Playgroud)

这会返回一个4x4表,其中包含行1,2,3,4和列Status,StatusHW,...,StatusTBC.这更接近我所追求的,但仍然不对.

任何帮助,将不胜感激.

谢谢

Dee*_*kha 6

只需删除group by已经处理过这些条件,同时汇总为:

 SELECT 
    -- Status,
    sum(case when Status = 'Homeworker' then 1 else 0 end) StatusHW,
    sum(case when Status = 'Home Based' then 1 else 0 end) StatusHB,
    sum(case when Status = 'PIP' then 1 else 0 end) StatusPIP,
    sum(case when Status = 'TBC' then 1 else 0 end) StatusTBC
    FROM HomeworkerStatus
    -- GROUP BY Status
Run Code Online (Sandbox Code Playgroud)