我需要根据用户帐户的金额计算百分比,并按帐户ID对数据进行分组。我在计算中计算了每笔付款的总和。一个问题是我还需要在没有付款的情况下显示acocunts。我的想法是使用CASE语句来检查aggragate sum是否给出null或值。当它返回null时,我将其替换为0。
我有以下查询
SELECT
DA.ACCOUNT_ID,
ROUND((1 - ((CASE
WHEN SUM(FPP.AMOUNT_IN_DEFAULT_CURRENCY) IS NOT NULL THEN SUM(FPP.AMOUNT_IN_DEFAULT_CURRENCY)
ELSE 0
END) / FAT.PERCENTAGE_INDICATOR)) * 100,0) AS "Percentage"
FROM DIM_ACCOUNT DA
JOIN TRANSACTION_TABLE FAT ON FAT.ACCOUNT_ID = DA.ID
JOIN PAYMENTS_TABLE FPP ON FPP.ACCOUNT_ID = DA.ID
GROUP BY DA.ACCOUNT_ID
但是当我用测试数据执行此操作时,它不起作用。该帐户未添加到我的列表中。我的NULL处理有问题吗?
当我剥离查询并且只在支付表上进行总结时,我得到以下输出:
< null> (没有空格)
我该如何做到这一点?
答案 0 :(得分:0)
NULL
被sum/max/min...
的聚合函数忽略
如果所有列值均为null
,则会出错。
Sum(column)
不能是null
SELECT sum(t.num) AS sum_val
FROM (
SELECT null AS num
) t
操作数数据类型NULL对于sum运算符
无效