从两个SQL查询中一起添加值以创建第三个值

时间:2015-10-20 16:40:59

标签: mysql sql

我的第一篇帖子就是这样,一直在做一些基本的SQL,但由于更多的责任需要学习更多。

下面的查询1给出了我们财务系统中所有代码的年初至今价值,这些代码从目标AAAAA到ZZZZZ和主观0000到9999,并非所有代码都在使用中,目前这是在第28周15。

下面的查询2给出了本周输入的期刊(在三个期刊表中)的总值(29),它们有一个名为jnl_processed的字段,可以使用AND AND JNL_PROCESSED =' N& #39;,根据相关的客观和主观代码,将未处理的期刊的价值相加,与表1相比,此表中的代码数量要少得多。

我期待着年底,一个有价值的问题是查看此实例周28中所有Year_To_Date(YTD)的值添加到期刊值29周以创建新列总数。

下面我分别提出了两个问题,但是很难合并这两个问题,任何人都可以协助吗?

查询1

SELECT OBJ_FULL,SUBJ_FULL,ACT_YTD_TY 
FROM DB2ADM2.TFINCATP
WHERE OBJ_FULL = 'TBBBB'
AND ACT_YTD_TY <> 0.00

产生这个:

OBJ_FULL    SUBJ_FULL   ACT_YTD_TY
TBBBB           3420            12,000.00 
TBBBB           3473            18,453.02 
TBBBB           3524            2,480.40 
TBBBB           3704            585.00 
TBBBB           7704            -4,142.71 
TBBBB           8199            -25.00 
TBBBB           9400            -168,363.10 
TBBBB           9403            -457.56 
TBBBB           9404            -9,666.73 
TBBBB           9405            -13,098.05 

查询2

SELECT  JNL_OBJ, JNL_SUBJ, SUM(JNL_VALUE)
FROM DB2ADM2.JNLFILE
WHERE JNL_PROCESSED = 'N' AND JNL_YEAR = '15' 
GROUP BY JNL_OBJ, JNL_SUBJ
UNION
SELECT  JNL_OBJ, JNL_SUBJ, SUM(JNL_VALUE)
FROM DB2ADM2.JNLRFILE
WHERE JNL_PROCESSED = 'N'  AND JNL_YEAR = '15'
GROUP BY JNL_OBJ, JNL_SUBJ
UNION
SELECT  JNL_OBJ, JNL_SUBJ, SUM(JNL_VALUE)
FROM DB2ADM2.JNLYFILE
WHERE JNL_PROCESSED = 'N'  AND JNL_YEAR = '15' 
GROUP BY JNL_OBJ, JNL_SUBJ

产生这个:

JNL_OBJ JNL_SUBJ    VALUE
TBBBB   9404            -547.78 
TBBBB   9405            -24.39 
TBBCA   9404            547.78 
TBBCC   9400            24.39 

理想情况下,结果应该返回(使用四个代码作为示例)

OBJ     SUBJ    YTD           VALUE        TOTAL
TBBBB   3420    12,000.00   0.00       12,000.00 
TBBBB   9403    -457.56     0.00       -457.56 
TBBBB   9404    -9,666.73   -547.78    -10,214.51 
TBBBB   9405    -13,098.05  -24.39     -13,122.44 

任何帮助都非常感谢,我不知道是否有更简单的方法来合并三个日记帐表而不是使用UNION,除了JNL_SOURCE之外,列是相同的,JA,JC和JD是每个表格。

这是当前数据于10月21日15:30返回

OBJ         SUBJ     YTD        VALUE   TOTAL
TBBBB   9404    -9666.73    -547.78 -10214.51
TBBBB   9405    -13098.05   -24.39  -13122.44

YTD列中还有其他几个代码值,但VALUE列为零,我需要包含所有代码。

2 个答案:

答案 0 :(得分:0)

你有两个非常好的查询。现在你需要像使用表一样使用它们 - 将它们视为虚拟表 - 并将它们连接在一起。

这样的事情可以解决问题。

SELECT query1.OBJ_FULL, query1.SUBJ_FULL, 
       query1.ACT_YTD_TY, query2.VALUE,
       (query1.ACT_YTD_TY + query2.VALUE) AS TOTAL 
  FROM ( 
          /* your first query */
       ) query1
  JOIN (
          /* your second query */
       ) query2 ON query1.OBJ_FULL = query2.JNL_OBJ
               AND query1.SUBJ_FULL = query2.JNL_SUBJ

这就是将两个结果集层叠在一起的技巧。

答案 1 :(得分:0)

尝试......

SELECT EOYQuery.OBJ_FULL AS OBJ,
       EOYQuery.SUBJ_FULL AS SUBJ,
       EOYQuery.ACT_YTD_TY AS YTD,
       JournalsQuery.JournalsValue AS VALUE,
       ( EOYQuery.ACT_YTD_TY + JournalsQuery.JournalsValue ) AS TOTAL
FROM ( SELECT OBJ_FULL,
              SUBJ_FULL,
              ACT_YTD_TY
       FROM DB2ADM2.TFINCATP
       WHERE OBJ_FULL = 'TBBBB'
         AND ACT_YTD_TY <> 0.00 ) EOYQuery,
     ( SELECT JNL_OBJ,
              JNL_SUBJ,
              SUM( JNL_VALUE ) AS JournalsValue
       FROM DB2ADM2.JNLFILE
       WHERE JNL_PROCESSED = 'N' AND
             JNL_YEAR = '15' 
       GROUP BY JNL_OBJ,
                JNL_SUBJ
       UNION SELECT JNL_OBJ,
                    JNL_SUBJ,
                    SUM( JNL_VALUE ) AS JournalsValue
             FROM DB2ADM2.JNLRFILE
             WHERE JNL_PROCESSED = 'N' AND
                   JNL_YEAR = '15'
             GROUP BY JNL_OBJ,
                      JNL_SUBJ
       UNION SELECT JNL_OBJ,
                    JNL_SUBJ,
                    SUM( JNL_VALUE ) AS JournalsValue
             FROM DB2ADM2.JNLYFILE
             WHERE JNL_PROCESSED = 'N' AND
                   JNL_YEAR = '15'
                               GROUP BY JNL_OBJ,
                      JNL_SUBJ ) JournalsQuery
WHERE EOYQuery.OBJ_FULL  = JournalsQuery.JNL_OBJ
  AND EOYQuery.SUBJ_FULL = JournalsQuery.JNL_SUBJ;

如果这是或不是合适的答案,请随时发表评论。

请注意:如果不确定所引用表格的结构以及存储在这些表格中的代表性(模仿)样本,我无法测试我的答案。

我可以尝试从您提供的示例中推断出这些,但构建在MySQL中复制这些脚本所需的脚本将花费比我目前更多的时间。如果您已经或可以自己构建此类脚本并且您可以发布它,并且这样做,那么我将能够测试我的答案并搜索可能存在的任何错误。