2011-10-21 126 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);