如何将聚合空值替换为0

时间:2015-10-09 12:35:42

标签: sql-server null sum aggregate

我需要根据用户帐户的金额计算百分比,并按帐户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> (没有空格)

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

NULLsum/max/min...的聚合函数忽略 如果所有列值均为null,则会出错。

Sum(column)不能是null

SELECT sum(t.num) AS sum_val
FROM (
    SELECT null AS num
) t
  

操作数数据类型NULL对于sum运算符

无效