2012-09-10 4 views
0

나는 다음과 같습니다 데이터 세트를 가지고 :오라클 SQL 요약/피벗 테이블

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

즉, 각 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 
"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

감사합니다 같은 것이 내부를 선택

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 

전체 선택으로 이런 일을보십시오. 그러나 쿼리를 실행하면 모든 "설명"범주가 반환되지 않으며 카운트도 제대로 표시되지 않습니다. 나는 내부 쿼리에서 사례를 사용할 때 "설명"의 첫 번째 오류를 식별 할 뿐이므로 ID에 2 개의 오류가있는 경우 위의 쿼리는 해당 쿼리의 첫 번째 오류를 식별합니다 (잘하면 의미가 있습니다!). 위에 쿼리의 축약 된 버전을 게시했습니다. – bawpie