2014-09-15 5 views
0

내가 "ambiguosuly 정의 열"을 얻고 문 아래에 실행하는 동안 .. 피벗 해제 : 열이 모호

날이에 도와주세요 ..

SELECT * 
FROM 
    (


    SELECT activity_type, 
     COUNT(decode(CASE WHEN activity_type = 'K' then 1 when activity_type='BH' then 1 END,1,1)) Holiday, 
    COUNT(decode(CASE WHEN activity_type = 'SL' then 1 when activity_type='2' then 1 END,1,1)) Leave, 
    COUNT(CASE WHEN activity_type = 'AL' then 1 ELSE NULL END) Annual, 
    COUNT(CASE WHEN activity_type = 'OL' then 1 ELSE NULL END) Other_no, 
    COUNT(CASE WHEN activity_type = 'IM' then 1 ELSE NULL END) InternalMeeting, 
    COUNT(CASE WHEN activity_type = 'TR' then 1 ELSE NULL END) Training, 
    COUNT(CASE WHEN activity_type = 'ISM' then 1 ELSE NULL END) Office, 
    COUNT(decode(CASE WHEN activity_type = 'CS' then 1 when activity_type='10' then 1 when activity_type='SAV'then 1 END,1,1,1)) ExternalMeeting, 
    COUNT(CASE WHEN activity_type = '9' then 1 ELSE NULL END) Symposium, 
    COUNT(CASE WHEN activity_type = '12' then 1 ELSE NULL END) Transit, 
    COUNT(CASE WHEN activity_type = 'H' then 1 ELSE NULL END) Result, 
    COUNT(CASE WHEN activity_type = '10' then 1 ELSE NULL END) CME 
    FROM planner_activity pa 
    WHERE tenant_id=500020 
     GROUP BY activity_type 
    ) 
    UNPIVOT 
    (
    monthly_count 
     FOR activity_type IN (HOLIDAY,LEAVE,ANNUAL,OTHER_NO,INTERNALMEETING,TRAINING,OFFICE,EXTERNALMEETING,SYMPOSIUM,TRANSIT,RESULT,CME) 
) 

을 나는 결과의 합을 수행 할 정의했다. 호야 도와 ..

출력 될 갈까요 :

Holiday 1 
Leave 1 
Anuual 2 
Other_no 1 
Noof days 5 

많은 감사를 도와 ..

수니타 ...

답변

0

당신이 오류가 발생하는 이유는 잘 모르겠지만, 왜 그냥이에 대한 하나의 group by합니까? 이런 식으로 뭔가 :

SELECT grp, count(*) 
FROM (SELECT (CASE WHEN activity_type = 'SL' then 'Leave' 
        WHEN activity_type = 'AL' then 'Annual' 
        WHEN activity_type = 'OL' then 'Other_no' 
        WHEN activity_type = 'IM' then 'InternalMeeting' 
        WHEN activity_type = 'TR' then 'Training' 
        WHEN activity_type = 'ISM' then 'Office' 
        WHEN activity_type IN ('CS', '10', 'SAV') then 'ExternalMeeting' 
        WHEN activity_type = '9' then 'Symposium' 
        WHEN activity_type = '12' then 'Transit' 
        WHEN activity_type = 'H' then 'Result' 
        WHEN activity_type = '10' then 'CME' 
       END) as grp, pa.* 
     FROM planner_activity pa 
     WHERE tenant_id = 500020 
    ) t 
GROUP BY grp; 
+0

안녕하세요, 고맙습니다. 답장을 보내 주셔서 대단히 감사합니다. 별도의 행과 같은 결과를 얻을 수 있습니다 .Noofdays Sum (count) ... 도움을 주신 것에 대해 많은 감사드립니다. – Sunitha

1

봅니다이로 변경 :

SELECT * 
FROM 
    (


    SELECT activity_type, 
     COUNT(decode(CASE WHEN activity_type = 'K' then 1 when activity_type='BH' then 1 END,1,1)) Holiday, 
    COUNT(decode(CASE WHEN activity_type = 'SL' then 1 when activity_type='2' then 1 END,1,1)) Leave, 
    COUNT(CASE WHEN activity_type = 'AL' then 1 ELSE NULL END) Annual, 
    COUNT(CASE WHEN activity_type = 'OL' then 1 ELSE NULL END) Other_no, 
    COUNT(CASE WHEN activity_type = 'IM' then 1 ELSE NULL END) InternalMeeting, 
    COUNT(CASE WHEN activity_type = 'TR' then 1 ELSE NULL END) Training, 
    COUNT(CASE WHEN activity_type = 'ISM' then 1 ELSE NULL END) Office, 
    COUNT(decode(CASE WHEN activity_type = 'CS' then 1 when activity_type='10' then 1 when activity_type='SAV'then 1 END,1,1,1)) ExternalMeeting, 
    COUNT(CASE WHEN activity_type = '9' then 1 ELSE NULL END) Symposium, 
    COUNT(CASE WHEN activity_type = '12' then 1 ELSE NULL END) Transit, 
    COUNT(CASE WHEN activity_type = 'H' then 1 ELSE NULL END) Result, 
    COUNT(CASE WHEN activity_type = '10' then 1 ELSE NULL END) CME 
    FROM planner_activity pa 
    WHERE tenant_id=500020 
     GROUP BY activity_type 
    ) 
    UNPIVOT 
    (
    monthly_count 
     FOR new_activity_type IN (HOLIDAY,LEAVE,ANNUAL,OTHER_NO,INTERNALMEETING,TRAINING,OFFICE,EXTERNALMEETING,SYMPOSIUM,TRANSIT,RESULT,CME) 
) 

activity_type이 쿼리에 두 번 사용 가능성 문제를 유발.

+1

당신은 문제와 해결책을 찾아 냈습니다. 원래의 절 "FOR activity_type IN"은 값 (예 : 휴가, 휴가, 연례 등)을 보관할 NEW 열을 식별해야 할 때 소스 테이블의 열을 참조했습니다. – StewS2