按年份显示的SQL查询结果

10

我有一个客户表,包含以下列。

 Admit_date    Gender     Homeless   Unemployed    Deleted 
 4/2/2012      Male         Yes         Yes           0
 1/1/2011      Female       Yes         Yes           0
 12/2/2011     Male          No          No           0
 5/23/2009     Female       Yes         Yes           0
 4/3/2009      Male          No          No           0
 7/4/2010      Male         Yes         Yes           0
 9/2/2010      Male         Yes         Yes           0 

我需要展示每年每个组的百分比。我认为这将需要一个数据透视表:
                 2009      2010     2011    2012
 Admitted         2          2        2      1
 Male            50%       100%     50%    100%
 Female          50%         0      50%      0%
 Homeless        50%       100%     50%     100%
 Unemployed      50%       100%     50%     100% 

这个查询会给出每年的计数:

 select year(admit_date_c) as Year_of_Admit,count((admit_date_c)) as Admitted
 from clients where deleted = '0' 
 group by year(admit_date_c)

 Year_of_Admit   Admitted
   2009             2
   2010             2
   2011             2
   2012             1

我尝试使用案例计数进行多次查询,但无法弄清如何获取性别、无家可归和失业人员的数量或百分比。一旦我有了这些数据,我认为我可以透视表来获得所需的显示结果。


2
什么数据库系统,以及哪个版本?SQL只是结构化查询语言 - 许多数据库系统使用的语言 - SQL不是数据库产品...许多东西都是供应商特定的 - 所以我们真的需要知道您正在使用什么数据库系统... - marc_s
1个回答

15

我认为这应该可以做到:

select year(admit_date) as year_of_admit,
  sum(case when gender='Male' then 1 else 0 end)*100/count(*) as Male, 
  sum(case when gender='Female' then 1 else 0 end)*100/count(*) as Female, 
  sum(case when homeless='Yes' then 1 else 0 end)*100/count(*) as Homeless
from client
group by year(admit_date)

我不知道除了男/女或是是/否之外是否可以有其他值,比如“未知”。在这种情况下,你需要决定例如10个男性、5个女性和5个未知意味着50%的男性,即已知性别的人中50%是男性,还是66%的男性,即已知性别的人中66%是男性。


搞定了。非常感谢你的帮助。 - Stan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接