2016-02-19 31 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

相關問題