2015-10-20 38 views
1

我的第一篇文章是这么做的,一直在做一些基本的SQL,但由于承担更多的责任而必须学习更多。从两个SQL查询中添加值以创建第三个值

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

下面的查询2给出了本周输入的日志(在三个日志表中)的总价值,他们有一个名为jnl_processed的字段,可以用行AND JNL_PROCESSED =' N',则根据相关的客观和主观代码计算未处理期刊的价值,与表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,列除了每个表的JA,JC和JD的JNL_SOURCE之外都是相同的。

这是21年10月15

15:30返回当前数据
OBJ   SUBJ  YTD  VALUE TOTAL 
TBBBB 9404 -9666.73 -547.78 -10214.51 
TBBBB 9405 -13098.05 -24.39 -13122.44 

有与在YTD列中的值,但该值列几个其它代码是零,我需要包括所有码。

+0

最终输出将会是什么样子? – agileMike

+0

是否允许TBBBB以外的OBJ值? – toonice

+0

是的,我会扩展它以覆盖可以从AAAAA到ZZZZZ的一系列代码 –

回答

0

的Try ...

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中复制这些脚本所需的脚本比我现在需要更多的时间。如果你有或可以自己构建这样的脚本,并允许你发布它,那么我将能够测试我的答案并追查可能存在的任何错误。

+0

Toonice,我不得不将以下行JournalsQuery.VALUE AS VALUE更改为JournalsQuery.JNL_VALUE作为AMT,并将其更改为(YTD + AMT)为TOTAL,但获得了以下消息。 –

+0

BIC000004。 DAL01008。访问数据库时发生错误。 DB2 SQL错误: SQLCODE:-206,SQLSTATE:42703,SQLERRMC:JOURNALSQUERY.JNL_VALUE; DB2 SQL错误:SQLCODE:-727,SQLSTATE:56098,SQELRRMC: 2:-206; 42703; JOURNALSQUERY.JNL_VALUE –

+0

我的apolgies - 我应该更加注意您所引用的查询。请注意:我对JournalsQuery.VALUE的使用是基于查询2的“输出”。我也可能发现了您的错误来源,我将相应地编辑我的答案。我是否正确地假设你不允许复制比你已经显示的更多的表格结构和数据? – toonice

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 

那请问你层压两个结果的伎俩一起设置。

+0

努力工作,获得以下错误 –

+0

BIC000004。 DAL01008。访问数据库时发生错误。 DB2 SQL错误: SQLCODE:-206,SQLSTATE:42703,SQLERRMC:QUERY2.JNL_VALUE; DB2 SQL错误: SQLCODE:-727,SQLSTATE:56098,SQLERRMC; 2; -206; 42703; QUERY2.JNL_VALUE –

+0

对不起,我没有丝毫的想法如何解释IBM db2错误消息。我以为你说这是使用MySQL数据库。 –

相关问题