聚合来自 SQL 的行,合并值并删除 NULL 到单行中

Agreggate rows from SQL combining values and removing NULLs into a single row

我在 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'

结果如下图所示。

我只想看到 1 行,按 PO_ID 分组,并且只在适用时显示非空值(如果该列像第 3 列一样全部为空值,那么我假设它最终为空值)

我正在使用 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;

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