在select中使用count函数的表中的行组合

时间:2016-11-07 19:32:36

标签: sql-server

我正在编写一个查询,以便从我的学生信息系统访问州和县记录合规性的健康信息。我们使用SQL Server 2000(遗留系统)作为后端。查询是这样的:

select
i.Description Immunization, 
             Case
                When si.Exempt = 'P' Then Count (LName)
                Else 0
                END AS 'Personal Exempt',
             Case
                When si.Exempt = 'M' Then Count (LName)
                Else '0'
                END AS 'Medical Exempt',
             Case
                When si.Exempt = 'R' Then Count (LName)
                Else 0
                END AS 'Religious Exempt',
             Case
                When si.Exempt = 'I' Then Count (LName)--AS 'Personal Exemption'
                Else '0'
                END AS 'Had Illness'                    
from student cross join immunization i left join StImmunization si on si.sno = Student.sno and si.immcode = i.code 
where Student.Status = 'A'  and  i.TotalReq > 0 
Group BY i.Description, si.exempt

输出是这样的:

Immunization          PersonalExempt   MedicalExempt   RelgiousExempt  HadIllness

Chicken pox (Varicella)   0               0                 0              6
Chicken pox (Varicella)   1               0                 0              0
Hepatitis B               1               0                 0              0
T_DAP                     0               0                 0              0
Polio                     0               0                 0              0
Diptheria, Tetanus,
Pertussis                 0               0                 0              0
Hepatitis B               0               0                 0              0
Diptheria, Tetanus,
Pertussis                 0               0                 0              0
MMR                       0               0                 0              0
T_DAP                     1               0                 0              0
MMR                       1               0                 0              0
Polio                     1               0                 0              0
Chicken pox (Varicella)   1               0                 0              0

我希望输出结合列的相似行,所以它看起来像这样,如果需要添加像行和列:

Imunization            PersonalExempt  Medical Exempt  Religious Exempt Had Illness
Chicken pox (Varicella)   2               0                  0            6
Hepatitis B               1               0                  0            0
T_DAP                     1               0                  0            0
Polio                     1               0                  0            0
Diptheria, Tetanus,
Pertussis                 1               0                  0            0

注意第一行(下面)是第2行和第13行(上图)的总和。关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:0)

最好在这里使用SUM - 然后你可以选择1或0来使总和得到计数。

旧SQL GROUP BY技巧。

select 
  i.Description AS Immunization, 
  SUM(Case When si.Exempt = 'P' Then 1 Else 0 END) AS 'Personal Exempt',
  SUM(Case When si.Exempt = 'M' Then 1 Else 0 END) AS 'Medical Exempt',
  SUM(Case When si.Exempt = 'R' Then 1 Else 0 END) AS 'Religious Exempt',
  SUM(Case When si.Exempt = 'I' Then 1 Else 0 END) AS 'Had Illness'                    
from student cross join immunization i left join StImmunization si on si.sno = Student.sno and si.immcode = i.code 
where Student.Status = 'A'  and  i.TotalReq > 0 
Group BY i.Description
相关问题