2011-10-21 220 views
2

我使用Netezza公司來生成報告,我有以下查詢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 

Pivot是不是在Netezza公司提供,所以我知道什麼是最好的方式去這將是。做這個的最好方式是什麼?

回答

3

我沒有與Netezza公司,但來自直接經驗我讀過它支持總和/標準SQL解決方案案例

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列之一(注意我沒有測試過,因爲我沒有安裝Netezza公司一起工作):

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);