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

Pivot 在 Netezza 中不可用,所以我想知道最好的方法是什么。做这个的最好方式是什么?

4

2 回答 2

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
于 2011-10-21T21:26:59.713 回答
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);
于 2011-10-21T21:22:15.033 回答