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

时间:2018-01-02 13:37:54

标签: db2

使用以下查询对整个列求和。在TOREMOVEALLPRIV列中,我有整数和空值。 我想将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;

输出图片:

Column image

预期的输出:

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

2 个答案:

答案 0 :(得分:1)

SUM功能会自动为您处理。你说这个专栏混合了NULL和数字; SUM会自动忽略NULL值并正确返回数字的总和。您可以在IBM Knowledge Center上阅读:

  

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

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

然而,您似乎误解了为什么您获得NULL的结果。它是坚果,因为该列包含null值,因为没有选择记录。这是SUM函数返回NULL时唯一的情况。如果您想在这种情况下返回零,则可以使用COALESCEIFNULL函数。这两种情况都是相同的:

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

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

我猜你想对查询中的所有其他列做同样的事情,所以我不确定为什么你只抱怨TO_REMOVEALLPRIV列。

答案 1 :(得分:0)

您正在寻找的是COALESCE功能:

 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;
相关问题