2016-11-07 1 views
0

私は、州および郡の記録遵守に関する学生情報システムから健康情報にアクセスするためのクエリを作成しています。私たちはバックエンドとして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 

通知行1(下)は、行2と13(上記)の合計です。どのようにこれを達成するための任意のアイデア?

+1

group by句からsi.exemptを削除します。 – Shadow

答えて

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 
関連する問題