如何使用DB2将空行转换为0并对整个列求和?

如何使用DB2将空行转换为0并对整个列求和?,db2,Db2,我使用以下查询对整个列求和。在TOREMOVEALLPRIV列中,我有整数和null值 我想对null和整数值求和,并打印总和值 下面是我的查询,它将总和值打印为null: select sum(URT.PRODSYS) as URT_SUM_PRODSYS, sum(URT.Users) as URT_SUM_USERS, sum(URT.total_orphaned) as URT_SUM_TOTAL_ORPHANED, sum(URT.Bp_errors)

我使用以下查询对整个列求和。在
TOREMOVEALLPRIV
列中,我有整数和
null

我想对
null
和整数值求和,并打印总和值

下面是我的查询,它将总和值打印为
null

select 
    sum(URT.PRODSYS) as URT_SUM_PRODSYS,
    sum(URT.Users) as URT_SUM_USERS,
    sum(URT.total_orphaned) as URT_SUM_TOTAL_ORPHANED,
    sum(URT.Bp_errors) as URT_SUM_BP_ERRORS,
    sum(URT.Ma_errors) as URT_SUM_MA_ERRORS,
    sum(URT.Pp_errors) as URT_SUM_PP_ERRORS,
    sum(URT.REQUIREURTCBN) as URT_SUM_CBNREQ,
    sum(URT.REQUIREURTQEV) as URT_SUM_QEVREQ,
    sum(URT.REQUIREURTPRIV) as URT_SUM_PRIVREQ,
    sum(URT.cbnperf) as URT_SUM_CBNPERF,
    sum(URT.qevperf) as URT_SUM_QEVPERF,
    sum(URT.privperf) as URT_SUM_PRIVPERF,
    sum(URT.TO_REMOVEALLPRIV) as TO_REMOVEALLPRIV_SUM
  from
    URTCUSTSTATUS URT
    inner join CUSTOMER C on URT.customer_id=C.customer_id;
输出图像:

预期产出:


我需要打印具有整数的行的总和,而不是
null

您要查找的是
合并
函数:

 select 
    sum(URT.PRODSYS) as URT_SUM_PRODSYS,
    sum(URT.Users) as URT_SUM_USERS,
    sum(URT.total_orphaned) as URT_SUM_TOTAL_ORPHANED,
    sum(URT.Bp_errors) as URT_SUM_BP_ERRORS,
    sum(URT.Ma_errors) as URT_SUM_MA_ERRORS,
    sum(URT.Pp_errors) as URT_SUM_PP_ERRORS,
    sum(URT.REQUIREURTCBN) as URT_SUM_CBNREQ,
    sum(URT.REQUIREURTQEV) as URT_SUM_QEVREQ,
    sum(URT.REQUIREURTPRIV) as URT_SUM_PRIVREQ,
    sum(URT.cbnperf) as URT_SUM_CBNPERF,
    sum(URT.qevperf) as URT_SUM_QEVPERF,
    sum(URT.privperf) as URT_SUM_PRIVPERF,
    sum(COALESCE(URT.TO_REMOVEALLPRIV,0)) as TO_REMOVEALLPRIV_SUM
  from
    URTCUSTSTATUS URT
    inner join CUSTOMER C on URT.customer_id=C.customer_id;

SUM
函数会自动为您处理该问题。您说该列混合了
NULL
和数字;
SUM
自动忽略
NULL
值,并正确返回数字的总和。您可以在以下网站上阅读:

该函数通过消除空值应用于从参数值派生的值集

注意:除了
COUNT
函数外,所有聚合函数都忽略
NULL
值。示例:如果有两条记录的值分别为
5
NULL
,则
SUM
AVG
函数都将返回
5
,但
COUNT
函数将返回
2

然而,您似乎误解了为什么会得到
NULL
。这不是因为列包含
null
值,而是因为没有选择任何记录。这是
SUM
函数返回
NULL
时的唯一情况。如果在这种情况下要返回零,可以使用
COALESCE
IFNULL
函数。这两种情况都是相同的:

COALESCE(sum(URT.TO_REMOVEALLPRIV), 0) as TO_REMOVEALLPRIV_SUM


我猜您希望对查询中的所有其他列执行相同的操作,因此我不确定您为什么只抱怨
to_REMOVEALLPRIV
列。

此代码浪费资源。
SUM
函数忽略
NULL
值。如果希望最终结果不为
NULL
,请切换函数顺序。不必检查每个值,只需检查最终结果。有关详细信息,请参阅我的答案。
IFNULL(sum(URT.TO_REMOVEALLPRIV), 0) as TO_REMOVEALLPRIV_SUM