从SQL聚合行组合值并将NULL删除到单个行中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从SQL聚合行组合值并将NULL删除到单个行中相关的知识,希望对你有一定的参考价值。

我在DB2中有以下查询,我需要将带有值的行与带有空值的行组合成一行,最后在有该列的有效数据时删除空值。

SQL是

select z.po_id, scdc.ship_id, dcdc.ship_id, scus.ship_id, dcus.ship_id

from covinfos.ibm_plant_order z

left join COVINFOS.IPO_LINE_TO_CASE A ON z.po_id = a.po_id

left JOIN COVINFOS.SHIPMENT scus ON (A.SHIP_ID = scus.SHIP_ID AND A.SHIP_TO_LOC_CODE = scus.SHIP_TO_LOC_CODE and scus.loc_type = 'CUS')

left join COVINFOS.SHIPMENT_EVENT dcus ON (scus.SHIP_ID = dcus.SHIP_ID_856 AND scus.SHIP_TO_LOC_CODE = dcus.SHIP_TO_LOC_CD856 
AND dcus.SHIP_EVNT_CD = 'D')

left JOIN COVINFOS.SHIPMENT scdc ON (A.SHIP_ID = scdc.SHIP_ID AND A.SHIP_TO_LOC_CODE = scdc.SHIP_TO_LOC_CODE and scdc.loc_type = 'CDC')

left join COVINFOS.SHIPMENT_EVENT dcdc ON (scdc.SHIP_ID = dcdc.SHIP_ID_856 AND scdc.SHIP_TO_LOC_CODE = dcdc.SHIP_TO_LOC_CD856 
AND dcdc.SHIP_EVNT_CD = 'D')

where

z.po_id = 'BQG546'

结果如下图所示。

enter image description here

我想看到只有1行,按PO_ID进行分组,并且只在适用时显示非空值(如果列具有像列3一样的所有空值,那么它将以null结尾,我假设)

我正在使用QMF for Workstation z / OS V11.1 Fix Pack 3来运行此查询。我试过XMLCAST但不确定我是否正确使用它。 LISTAGG似乎不支持此客户端。我想在Cognos BI中实现它,所以它可以再次起作用。

有谁知道如何解决这个问题?

谢谢

答案

只需使用聚合:

select z.po_id, max(scdc.ship_id), max(dcdc.ship_id), max(scus.ship_id), max(dcus.ship_id)
from . . .
group by z.po_id;

每列中似乎最多只有一个非NULL值,因此max()就足够了。

以上是关于从SQL聚合行组合值并将NULL删除到单个行中的主要内容,如果未能解决你的问题,请参考以下文章

SQL语句汇总——聚合函数分组子查询及组合查询

vim中代码多行删除

layui当点击增加的时候,将form中的值获取的添加到table行中代码

统计代码中代码行空行注释行的个数

如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中

SQL Server聚合函数与聚合开窗函数