我在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 3来运行这个查询。我尝试了XMLCAST,但不确定我是否正确地使用了它。这个客户端似乎不支持LISTAGG。然后,我想在Cognos中实现它,这样它就可以再次工作了。
有人知道怎么解决这个问题吗?
谢谢
发布于 2018-03-01 23:07:12
只需使用聚合:
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;每个列中似乎最多只有一个非空值,因此max()就足够了。
https://stackoverflow.com/questions/49059972
复制相似问题