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

问题描述 投票:1回答:1

我在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中实现它,所以它可以再次起作用。

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

谢谢

sql db2 aggregation
1个回答
0
投票

只需使用聚合:

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()就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.