2012-09-10 36 views
0

我有一個數據組,看起來像這樣:的Oracle SQL摘要/樞軸表

ID  Description      Team 
    A  Missing Name; Missing Gender Team1 
    B  Missing Gender     Team1 
    C  Missing Name     Team2 
    D  Missing Name     Team2 

即,每個ID具有一個線,以識別與該ID的任何問題文本列(介紹),以及作爲該ID所屬的團隊的名稱。我已經成功地概括它:

Team  Missing Gender  Missing Name 
    Team1  2     1 
    Team2  0     2 

通過使用一個case語句看起來像這樣:

 SELECT 
    "Team", 
    sum(case when "DQ Info" like '%Missing Gender%' then 1 ELSE 0 END) as "Missing Gender", 
    sum(case when "DQ Info" like '%Missing Name%' then 1 ELSE 0 END) as "Missing Name" 
    FROM 
    (*) 
    GROUP BY "Team" 

我希望能夠使它看起來像來概括這個數據這個代替:

Description   Team1  Team2 
    Missing Gender  2   0 
    Missing Name  1   2 

我知道一定有這樣做的一種方式,但我此刻的掙扎 - 在上述領域只使用「說明」,而不是「團隊」給出了這樣的結果:

Description      Team1  Team2 
    Missing Name; Missing Gender 1   0 
    Missing Gender     1   0 
    Missing Name     0   2 

這不是我所追求的。任何幫助表示讚賞,但我會繼續修改,所以如果我設法弄清楚,我會更新這篇文章。請注意,這僅僅是數據集的一個例子,而不是實際的數據集。

編輯:根據bpgergo的建議進行查詢。在完成一些閱讀後,看起來下面將會短路,即一旦滿足內部情況下的第一個標準就終止查詢,這意味着它將永遠不能夠多次計數列。這是一個恥辱,但我認爲我將不得不堅持我的原始查詢。

SELECT 
    "Description", 
    sum(case when "Team" like 'Team1' then 1 ELSE 0 END) as "Team1", 
    sum(case when "Team" like 'Team2' then 1 ELSE 0 END) as "Team2" 
    FROM(SELECT 
    "Team", 
    case when "DQ Info" like '%[Check Role]%' then '[Check Role]' 
    ELSE case when "DQ Info" like '%[Client deceased]%' then '[Client deceased]' 
    ELSE case when "DQ Info" like '%[2 Parents not recorded]%' then '[2 Parents not recorded]' 
    ELSE case when "DQ Info" like '%[Religion not recorded]%' then '[Religion not recorded]' 
    ELSE case when "DQ Info" like '%[1st Language not recorded]%' then '[1st Language not recorded]' 
    ELSE case when "DQ Info" like '%[Ethnicity not recorded]%' then '[Ethnicity not recorded]' 
    ELSE case when "DQ Info" like '%[No Current Worker]%' then '[No Current Worker]' 
    ELSE case when "DQ Info" like '%[No Current Team]%' then '[No Current Team]' 
    ELSE case when "DQ Info" like '%[Update Gender]%' then '[Update Gender]' 
    ELSE case when "DQ Info" like '%[No Plan]%' then '[No Plan]' 
    ELSE case when "DQ Info" like '%[Update Plan]%' then '[Update Plan]' 
    END END END END END END END END END END END 
    as "Description" 
    FROM(
    * 
    FROM 
    (*)WORKLOAD)DATA) 
    GROUP BY "Description" 

回答

0

你已經半途而廢了。嘗試這樣的事情作爲一個內部的選擇

select 
case when "Description" like '%Missing Gender%' then "Missing_gender" 
ELSE case when "Description" like '%Missing Name%' then "Missing_name" ELSE null END 
END as "Description", 
Team 
from your_table 

整個選擇會是這樣的

SELECT 
"Description", 
sum(case when "Team" = 'Team1' then 1 ELSE 0 END) as "Team1", 
sum(case when "Team" = 'Team2' then 1 ELSE 0 END) as "Team2", 
FROM 
(
    select 
    case when "Description" like '%Missing Gender%' then "Missing_gender" 
    ELSE case when "Description" like '%Missing Name%' then "Missing_name" ELSE null END 
    END as "Description", 
    Team 
    from your_table 
) 
GROUP BY "Description" 
+0

感謝 - 這是有道理的。但是,當我運行查詢時,它不會返回所有的「描述」類別,也不是正確的計數。我認爲當在內部查詢中使用大小寫時,它只是識別「說明」中的第一個錯誤 - 所以如果一個ID有2個錯誤,上面的查詢只會識別該查詢中的第一個錯誤(希望這很有道理! )。我已經發布了上述查詢的縮寫版本。 – bawpie