SQL语句的总和不能为100%

时间:2019-07-26 06:48:06

标签: sql sql-server tsql

在生成下面的SQL语句时,我总计不能达到100%。

SQL:

SELECT T.EventTypeName, 
ROUND(((COUNT(CASE Nursing WHEN 1 THEN 1 ELSE NULL END)) * 100 / ((COUNT(CASE Nursing WHEN 1 THEN 1 ELSE NULL END)) + COUNT(CASE PatientEldery WHEN 1 THEN 1 ELSE NULL END) + COUNT(CASE Disability WHEN 1 THEN 1 ELSE NULL END))),0) AS Nursing ,
ROUND(((COUNT(CASE PatientEldery WHEN 1 THEN 1 ELSE NULL END)) * 100 / ((COUNT(CASE Nursing WHEN 1 THEN 1 ELSE NULL END)) + COUNT(CASE PatientEldery WHEN 1 THEN 1 ELSE NULL END) + COUNT(CASE Disability WHEN 1 THEN 1 ELSE NULL END))),0) AS PatientEldery,
ROUND(((COUNT(CASE Disability WHEN 1 THEN 1 ELSE NULL END)) * 100 / ((COUNT(CASE Nursing WHEN 1 THEN 1 ELSE NULL END)) + COUNT(CASE PatientEldery WHEN 1 THEN 1 ELSE NULL END) + COUNT(CASE Disability WHEN 1 THEN 1 ELSE NULL END))),0) AS Disability 
FROM StEvent S, EventType T WHERE S.EventTypeId = T.EventTypeId GROUP BY T.EventTypeName

我希望总数为100%enter image description here

1 个答案:

答案 0 :(得分:0)

改为使用Sum并将null替换为0

SELECT T.EventTypeName, 
ROUND(((COUNT(CASE Nursing WHEN 1 THEN 1 ELSE 0 END)) * 100 / ((COUNT(CASE Nursing WHEN 1 THEN 1 ELSE 0 END)) + COUNT(CASE PatientEldery WHEN 1 THEN 1 ELSE 0 END) + COUNT(CASE Disability WHEN 1 THEN 1 ELSE 0 END))),0) AS Nursing ,
ROUND(((COUNT(CASE PatientEldery WHEN 1 THEN 1 ELSE 0 END)) * 100 / ((COUNT(CASE Nursing WHEN 1 THEN 1 ELSE 0 END)) + COUNT(CASE PatientEldery WHEN 1 THEN 1 ELSE 0 END) + COUNT(CASE Disability WHEN 1 THEN 1 ELSE 0 END))),0) AS PatientEldery,
ROUND(((COUNT(CASE Disability WHEN 1 THEN 1 ELSE 0 END)) * 100 / ((COUNT(CASE Nursing WHEN 1 THEN 1 ELSE 0 END)) + COUNT(CASE PatientEldery WHEN 1 THEN 1 ELSE 0 END) + COUNT(CASE Disability WHEN 1 THEN 1 ELSE 0 END))),0) AS Disability 
FROM StEvent S, EventType T WHERE S.EventTypeId = T.EventTypeId GROUP BY T.EventTypeName