2013-07-22 22 views
1

我的視圖將每個計數的結果輸出爲列。我需要重構下面的代碼,以便將每個計數輸出爲一行:一列標識計數,一列標識計數結果。任何幫助將不勝感激。用多個計數重組視圖:將每個計數輸出爲一行,而不是一列

CREATE OR REPLACE VIEW oa_count_ii 
AS 
SELECT COUNT(
CASE 
WHEN cap_udfi IN ('NEW_ENT','IRP_RVW') 
AND mhd_mscc = 'ADMUHFLSCP' 
THEN 1 
END) newapp_admuhflscp, 
COUNT(
CASE 
WHEN cap_udfi IN ('APF_RVW','RVW_RVW','TUT_RVW','TU2_RVW','TUT_DC1','TU2_DC1','RVW_IRP','IRP_IIO','IRP_DC1','IIO_DC1','RECALL') 
AND cap_dec1 = 'No Decision' 
AND mhd_mscc = 'ADMUHFLSCP' 
AND mhd_tsks = 'P' 
THEN 1 
END) apfrvw_admuhflscp, 
COUNT(
CASE 
WHEN cap_udfi IN ('RVW_TUT','TUT_TU2') 
AND mhd_mscc IN ('FACPSYCHL1','FACPSYCHL2') 
AND mhd_tsks ='T' 
THEN 1 
END) rvwtutw_admuhflscp, 
FROM oa_intray; 

回答

1

由於三項罪名似乎是完全互斥的,你可以做這樣的:

CREATE OR REPLACE VIEW oa_count_ii AS 
SELECT dl.count_type, count(ilv.count_type) record_count from 
(SELECT CASE level 
      WHEN 1 THEN 'newapp_admuhflscp' 
      WHEN 2 THEN 'apfrvw_admuhflscp' 
      WHEN 3 THEN 'rvwtutw_admuhflscp' 
     END count_type 
FROM DUAL 
CONNECT BY level <= 3) dl 
LEFT JOIN 
(SELECT CASE 
      WHEN cap_udfi IN ('NEW_ENT','IRP_RVW') 
      AND mhd_mscc = 'ADMUHFLSCP' 
       THEN 'newapp_admuhflscp' 
      WHEN cap_udfi IN ('APF_RVW','RVW_RVW','TUT_RVW','TU2_RVW','TUT_DC1','TU2_DC1','RVW_IRP','IRP_IIO','IRP_DC1','IIO_DC1','RECALL') 
      AND cap_dec1 = 'No Decision' 
      AND mhd_mscc = 'ADMUHFLSCP' 
      AND mhd_tsks = 'P' 
       THEN 'apfrvw_admuhflscp' 
      WHEN cap_udfi IN ('RVW_TUT','TUT_TU2') 
      AND mhd_mscc IN ('FACPSYCHL1','FACPSYCHL2') 
      AND mhd_tsks ='T' 
       THEN 'rvwtutw_admuhflscp' 
     END count_type 
FROM oa_intray) ilv 
ON dl.count_type = ilv.count_type 
GROUP BY dl.count_type; 
+0

感謝馬克。這段代碼幾乎可以完成我所需要的功能,但是如果我需要count_type來始終顯示,即使計數結果爲「零」,該怎麼辦?謝謝! – user2181935

+0

@ user2181935:查看已更新的答案。 –

+0

輝煌,謝謝。 – user2181935

相關問題