2017-07-17 44 views
0

我想在我的選擇查詢中創建條件計算列。邏輯如下給出PL/SQL:需要在選擇查詢中創建條件計算列

Select FT.NAME, 
    COUNT(DISTINCT PAGEID) as Total_Forms, 
    COUNT(DISTINCT PAGEID WHERE FT."Column1?" =1) as Expected_forms, 
    COUNT(DISTINCT PAGEID WHERE FT."Column1?" =1 AND FT."FORM STATUS" in ('C','I') as Actual_forms, 
    COUNT(DISTINCT DATAPAGEID WHERE FT."IS FORM EXPECTED1?" =1)/ 
    COUNT(DISTINCT DATAPAGEID WHERE FT."IS FORM EXPECTED1?" =1 AND FT."FORM STATUS" in ('C','I')) 
    as Percentage 
    FROM 
     (Subquery) FT 
    Group by FT.Name 

我已經嘗試過各種組合,但到目前爲止沒有任何工作。輸出看起來像這樣

name  Total_forms Expected_forms Actual Forms Percentage 
    abc  943   811    781   96.54% 
    pqr  900   800    600   75.00% 

我無法在PL/SQL查詢中制定這個。任何幫助深表感謝。

回答

1

這個語法是錯誤的:

COUNT(DISTINCT PAGEID WHERE FT."Column1?" =1) as Expected_forms, 

使用CASE Expression代替:

SELECT 
    COUNT(DISTINCT PAGEID) as Total_Forms, 
    COUNT(DISTINCT CASE WHEN FT."Column1?" =1 THEN PAGEID END) as Expected_forms, 
    COUNT(DISTINCT CASE WHEN FT."Column1?" =1 AND FT."FORM STATUS" in ('C','I') 
        THEN PAGEID END) as Actual_forms, 
    COUNT(DISTINCT CASE WHEN FT."IS FORM EXPECTED1?" =1 THEN DATAPAGEID END)/ 
    COUNT(DISTINCT CASE WHEN FT."IS FORM EXPECTED1?" =1 AND FT."FORM STATUS" in ('C','I') 
        THEN DATAPAGEID END) as Percentage 
    FROM 
     (Subquery) FT 
    Group by FT.Name