我正在尝试根据银行审批状态获取捐款总额,并按礼品类别分组。但是,脚本在单独的行上输出RR和NR捐赠(参见下面的脚本)。似乎案例陈述根本不起作用。
txlotext.rep Report txlotext.rep
答案 0 :(得分:3)
我相信你正在寻找这个逻辑:
select gift_kind,
sum(case when c.bank_approval_status = 'AP' then c.charge_amount
end) as approved,
sum(case when c.bank_approval_status in ('RR', 'NR') then c.charge_amount
end) as rejected,
sum(case when c.bank_approval_status in ('AR') then c.charge_amount*-1
end) as refunded,
sum(case when c.bank_approval_status not in ('AR','AP','RR','NR') then c.charge_amount
end) other_status
from charge_log c join
transactions t
on c.account_id = t.account_id and
c.gift_date = t.gift_date and
c.gift_seq = t.gift_seq and
C.PLEDGE_NUMBER = t.pledge_number
where c.process_id = 'CHG - 02532' and t.sts = 'A'
group by t.fund_type, t.gift_kind
order by gift_kind asc
注意:
JOIN
语法。 从不在FROM
子句中使用逗号。JOIN
条件应全部在ON
子句中,而不是WHERE
子句。CASE
是SUM()
的参数。bank_approval_status
。GROUP BY
fund_type
位于GROUP BY
。你可能有理由这样我离开了。答案 1 :(得分:0)
您需要将case
子句放在总和中,然后添加else 0
以确保您不会得到null
:
sum(case
when c.bank_approval_status = 'AP' then
c.charge_amount else 0 end) approved,
sum(case
when c.bank_approval_status in ('RR','NR') then
c.charge_amount else 0 end) rejected,
sum(case
when c.bank_approval_status = 'AR' then
-c.charge_amount else 0 end) refunded,
sum(case
when c.bank_approval_status not in ('AR','AP','RR','NR') then
c.charge_amount else 0 end) other_status
您的group by
应该很少出现在汇总中使用的列上(bank_approval_status
中的sum
)。改为:
group by gift_kind
根据您的方案,可能需要将其他字段添加到group by
子句中,但是将它们放在select
和order by
子句中也是有意义的。