2016-02-19 71 views
0

我想创建一个查询给我一个同一列的计数,但有3个不同的列显示基于不同where子句的结果。下面UNION ALL给我的结果,但将所有3个结果中的一列,而不是3分不同的列需要在同一列多次使用不同的where子句在每个结果上聚合函数

(SELECT DISTINCT COUNT(dm.pat_id) AS Compliant, dep.department_name 
FROM diab dm 
INNER JOIN table_ser_2 ser2 ON dm.cur_pcp_prov_id = ser2.prov_id 
INNER JOIN table_dep dep ON ser2.primary_dept_id = dep.department_id 
WHERE diab.hba1c_last <='9' 
GROUP BY dep.DEPARTMENT_NAME) 
UNION ALL 
(SELECT DISTINCT COUNT (dm2.pat_id) AS TotalDiabetics, dep.department_name 
FROM dm_diab dm2 
INNER JOIN table_ser_2 ser2 ON dm2.cur_pcp_prov_id = ser2.prov_id 
INNER JOIN table_dep dep ON ser2.primary_dept_id = dep.department_id 
WHERE dm2.hba1c_last IS NOT NULL 
GROUP BY dep.department_name) 
UNION ALL 
(SELECT DISTINCT COUNT (dm3.pat_id) AS TotalMissing, dep.department_name 
FROM dm_diab dm3 
INNER JOIN table_ser_2 ser2 ON dm3.cur_pcp_prov_id = ser2.prov_id 
INNER JOIN table_dep dep ON ser2.primary_dept_id = dep.department_id 
WHERE dm3.hba1c_last IS NULL 
GROUP BY dep.department_name) 
ORDER BY dep.DEPARTMENT_NAME 
+0

的[集合函数Where子句条件(可能的复制http://stackoverflow.com/ question/4662955/where-clause-condition-on-aggregate-functions) –

+0

'group by'后的'distinct'? –

回答

1
SELECT COUNT(CASE WHEN diab.hba1c_last <='9'  THEN dm.pat_id END) AS Compliant 
     ,COUNT(CASE WHEN dm.hba1c_last IS NOT NULL THEN dm.pat_id END) AS TotalDiabetics 
     ,COUNT(CASE WHEN dm.hba1c_last is null  THEN dm.pat_id END) AS TotalMissing 
     ,dep.department_name 
FROM diab dm 
    INNER JOIN table_ser_2 ser2 ON dm.cur_pcp_prov_id = ser2.prov_id 
    INNER JOIN table_dep dep ON ser2.primary_dept_id = dep.department_id 
GROUP BY dep.DEPARTMENT_NAME 
+0

谢谢。灯泡继续,我明白了,很高兴看到你的回答时看到确认我是对的 – agalgay

相关问题