2011-10-21 3 views
2

내가 보고서를 생성 네티을 사용하고 있는데 나는 다음과 같은 쿼리를 가지고Netezza의 통합 문제 (피벗)

select b.group_name,a.group_id, PASS_FAIL, COUNT(*) from log a 
join group b on a.group_id=b.group_id 
group by b.group_name,a.group_id, PASS_FAIL 

그것은이 같은 테이블에 패스 및 실패 횟수에 대한 정보를 수집합니다

GROUP_NAME GROUP_ID PASS_FAIL COUNT 
    GROUP1  4   FAIL  382 
    GROUP1  4   PASS  339 

어떻게 PASS와 FAIL을 열로 사용할 수 있도록 쿼리를 변경할 수 있습니까?

GROUP_NAME GROUP_ID  PASS  FAIL 
GROUP1  4   339  382 

피벗 그래서 나는 가장 좋은 방법이 될 것이라고 가야할지 궁금 Netezza를 사용할 수 없습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

3

나는 그것이 SUM의 표준 SQL 솔루션/CASE

SELECT 
    GROUP_NAME, 
    GROUP_ID, 
    SUM(CASE WHEN PASS_FAIL = 'PASS' THEN 1 ELSE 0 END) as PASS, 
    SUM(CASE WHEN PASS_FAIL = 'FAIL' THEN 1 ELSE 0 END) as FAIL 
FROM 
    log a 
    join group b 
    on a.group_id=b.group_id 
GROUP BY 
    b.group_name, 
    a.group_id 
+0

완벽한 지원 무엇을 읽었습니다. 분명히 나는 ​​그것을 필요 이상으로 복잡하게 만들려고 노력하고 있었다. – Rondel

2

각각 위의 passfail 열 중 하나를 생성하는 위 쿼리의 수정 된 버전을 자체 조인하면됩니다 (설치가 없으므로 테스트하지 않았습니다. 네티는)와 함께 작동합니다 : 나는 네티은 있지만 직접적인 경험이없는

select group_name,group_id,pass,fail 
from(
    select group_name,group_id,pass 
    from(
     select b.group_name,a.group_id, COUNT(*) as pass 
     from log a 
     join group b on a.group_id=b.group_id 
     where pass_fail='PASS' 
     group by b.group_name,a.group_id 
     )x 
    )p 
join(
    select group_name,group_id,fail 
    from(
     select b.group_name,a.group_id, COUNT(*) as fail 
     from log a 
     join group b on a.group_id=b.group_id 
     where pass_fail='FAIL' 
     group by b.group_name,a.group_id 
     )y 
    )f 
on(p.group_name=f.group_name and p.group_id=f.group_id);