【发布时间】:2015-10-09 12:35:41
【问题描述】:
我需要根据用户帐户上的金额计算一个百分比,并按帐户 ID 对数据进行分组。我在计算中计算了每笔使用的付款的总和。一个问题是我还需要显示没有付款的帐户。我的想法是使用 CASE 语句来检查总和是否给出空值或值。当它返回 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 处理有问题吗?
当我剥离查询并且只在支付表上求和时,我得到以下输出:
(不带空格)
我怎样才能做到这一点?
【问题讨论】:
-
查看可能是 SUM(whole case statement ....)
-
为什么不只是 SUM(COALESCE(MyColumn,0))?无需 CASE 语句。
标签: sql-server null sum aggregate