【发布时间】:2018-10-16 18:32:25
【问题描述】:
我有三个查询,我必须将它们组合在一起。
查询 1
WITH ph
AS (SELECT chrd, chwo, chse, chst, chvr, chfv, chrd,
ROW_NUMBER () OVER(PARTITION BY chwo ORDER BY chse, chvr desc) TEMP
FROM wrpd.wscl
WHERE chaj > '20180901'
AND chst = 'R'
AND chstb IN ( 'L1', 'R2' )
ORDER BY chse)
SELECT *
FROM ph A
WHERE A.temp = 1
查询 2
SELECT chrd, chwo, chse, chst, chvr, chfv, chrd,
ROW_NUMBER () OVER( PARTITION BY chwo ORDER BY chse, chvr desc) TEMP
FROM wrpd.wscl
WHERE chajdt > '20180901'
AND chst IN ( 'P', 'A' )
AND chstb IN ( 'L1', 'R2' )
ORDER BY chst desc, chse
查询 3
SELECT partd1, actdd1, dmre, dmde, dlro, dord, wvin, rcdt,
CHAR(DATE(Substr(CHAR(rcdt), 1, 4)
|| '-'
|| Substr(CHAR(rcdt), 5, 2)
|| '-'
|| Substr(CHAR(rcdt), 7, 2)), usa) AS "Conversion",
SUM(qty) AS Shipments,
rcdt-dord AS Ship_Days
FROM pspd.zpslsp,
pspd.zpslma,
dlpd.drdm,
wrpd.wscl
WHERE partd1 = partpm
AND delr = dmde
AND actdd1 BETWEEN '201801' AND '201810'
AND otypd1 NOT IN ( 'T', 'Z', 'W' )
AND dmty = 'RD'
AND partpm LIKE '21101%'
AND Substr(delr, 3, 3) NOT BETWEEN '390' AND '399'
AND qtys > 0
AND chfv = wvin
GROUP BY partd1, actdd1, dmde, dlro, dord, rcdt, dmre, wvin
ORDER BY 1, 2
最终结果中的所需列:
DMRE, CHRD, DMDE, CHWO, CHSE, CHST, CHVR, CHFV, WVIN, PARTd1, ACTDd1,
CHRD, DLRO, DORD, RCDT,
CHAR(DATE(Substr(CHAR(rcdt), 1, 4)
|| '-'
|| Substr(CHAR(rcdt), 5, 2)
|| '-'
|| Substr(CHAR(rcdt), 7, 2)), usa)
AS "Conversion",
SUM(QTYS) AS Shipments, RCDT-DORD AS Ship_Days
ROW_NUMBER () OVER(PARTITION BY CHWO ORDER BY CHSE,CHVR DESC) TEMP
注意:我不能将查询 1 和查询 2 合并为一个,因为输出不同。
新编辑:我在查询 2 中添加了“ROW_NUMBER () OVER(PARTITION BY CHWO ORDER BY CHSE,CHVR DESC) TEMP”,这可能有助于使用联合。
提前致谢!
【问题讨论】:
-
样本数据和期望的结果真的很有帮助。
-
请分享架构或至少在一段时间内限定列,以便我们查看来源。
-
嗨。假设我说,我这里有三个整数,我想要一个整数结果,如何组合它们呢?请阅读minimal reproducible example并采取行动。
-
@philipxy 我得到了想要的答案,这个帖子中的答案。我想要的结果很清楚。你能清楚地解释我应该完成/修复什么吗??
-
你没有说想要的结果应该是什么。你只需给出它的列。 “结合”没有任何意义——见我的第一条评论。接受的答案是“我猜”和“类似这样的”。结果中出现了哪些行? “完成/修复”是说,用省略号完成/修复句子,表示结果中有哪些行。
标签: sql join db2 union union-all