Sql 如何组合三个查询?

Sql 如何组合三个查询?,sql,join,db2,union,union-all,Sql,Join,Db2,Union,Union All,我有三个问题,我必须把它们结合起来 问题1 问题2 问题3 最终结果中所需的列: 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)

我有三个问题,我必须把它们结合起来

问题1

问题2

问题3

最终结果中所需的列:

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中添加了CHWO ORDER BY CHSE、CHVR DESC TEMP的行数超额分配,这可能有助于使用union


提前谢谢

我相信你自己能解决这个问题。。我想应该是这样的。。但你并没有说你想要如何组合数据,所以我只是一个叉积,其中最后一个数据集的1=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 
), DT AS(
    SELECT CHRD,CHWO,CHSE,CHST,CHVR,CHFV,CHRD,
    ROW_NUMBER () OVER(PARTITION BY CHWO ORDER BY CHSE,CHVR  DESC) TEMP
    FROM WRPDAT.WSCLHP
    WHERE CHAJDT > '20180901' 
    AND CHST IN ('P','A') 
    AND CHSTB in ('L1', 'R2')
)
, U AS (
    SELECT * 
    FROM PH A
    WHERE A.TEMP=1
    UNION ALL
    SELECT *
    FROM DT
)
, Z AS
(
    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
)
SELECT U.*, Z.* FROM U, Z WHERE CHFV = WVIN
ORDER BY TEMP, PARTd1, ACTDd1

示例数据和所需结果将非常有帮助。请共享架构或至少限定期间的列,以便我们可以查看sources.Hi。假设我说,这里有三个整数,我想要一个整数结果,我如何组合它们?请阅读并付诸行动。@philipxy我得到了想要的答案,在这个帖子里。我想要的结果很清楚。你能清楚地解释我应该完成/修复什么吗?你没有说期望的结果应该是什么。你只要给它列。合并意味着什么都没有看到我的第一条评论。公认的答案是,我猜是这样的。结果中显示了哪些行?finish/fix是说,用省略号完成句子,这表示结果中有哪些行。嘿,我不明白你的意思:你想如何组合数据??我想要的结果中的所有列都用于相同的记录。CHFV=WVIN,这个条件等同于查询1、2和3的表中的值。我还在查询2的表名中做了另一个更正。真的很抱歉这么晚了好吧,所以我把WHERE 1=1改为WHERE CHFV=WVIN,如果你想加入结果集的话。一般来说,你问的并不难。如果您需要有人给您提供精确的代码,那么您需要为数据提供DDL和示例INSERT语句。否则,尝试创建一个玩具/将示例缩减为零,以了解您正在努力学习的SQL知识。当我添加其中CHFV=WVIN时得到了结果。
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
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 
), DT AS(
    SELECT CHRD,CHWO,CHSE,CHST,CHVR,CHFV,CHRD,
    ROW_NUMBER () OVER(PARTITION BY CHWO ORDER BY CHSE,CHVR  DESC) TEMP
    FROM WRPDAT.WSCLHP
    WHERE CHAJDT > '20180901' 
    AND CHST IN ('P','A') 
    AND CHSTB in ('L1', 'R2')
)
, U AS (
    SELECT * 
    FROM PH A
    WHERE A.TEMP=1
    UNION ALL
    SELECT *
    FROM DT
)
, Z AS
(
    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
)
SELECT U.*, Z.* FROM U, Z WHERE CHFV = WVIN
ORDER BY TEMP, PARTd1, ACTDd1