我在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一样的所有空值,那么它将以null结尾,我假设)
我正在使用QMF for Workstation z / OS V11.1 Fix Pack 3来运行此查询。我试过XMLCAST但不确定我是否正确使用它。 LISTAGG似乎不支持此客户端。我想在Cognos BI中实现它,所以它可以再次工作。
有谁知道如何解决这个问题?
由于
答案 0 :(得分: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()
就足够了。