我正在使用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中没有Pivot,所以我想知道最好的方法是什么。这样做的最佳方式是什么?
答案 0 :(得分:3)
我没有直接使用netezza的经验,但是根据我的阅读,它支持SUM / CASE的标准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
答案 1 :(得分:2)
只需对上面的查询的修改版本进行自我加入,每个版本都会生成您需要的pass
和fail
列之一(请注意,我之前没有对此进行过测试)没有安装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);