我有一个来自两个表的SQL查询,但我需要一些帮助来扩展结果。
我正在运行的查询是:
SELECT
B.OBJ_FULL, B.SUBJ_FULL, B.ACT_YTD_TY,
SUM(A.JNL_VALUE) AS JNL_TOTAL
FROM
DB2ADM2.JNLFILE A
INNER JOIN
DB2ADM2.TFINCATP B ON B.OBJ_FULL = A.JNL_OBJ
AND B.SUBJ_FULL = A.JNL_SUBJ
WHERE
A.JNL_YEAR ='15'
AND A.JNL_PROCESSED ='N'
AND OBJ_FULL = 'TBBBB'
GROUP BY
B.OBJ_FULL, B.SUBJ_FULL, B.ACT_YTD_TY
返回的数据是:
OBJ_FULL SUBJ_FULL ACT_YTD_TY JNL_TOTAL
-----------------------------------------
TBBBB 9404 -9666.73 -547.78
TBBBB 9405 -13098.05 -24.39
我现在已将上面的查询拆分为两个单独的查询,以显示每个查询返回的数据。
查询1 - 本周未在代码TBBBB上处理的日记帐值
SELECT
JNL_OBJ, JNL_SUBJ, SUM(JNL_VALUE) AS JNL_VALUE
FROM
DB2ADM2.JNLFILE
WHERE
JNL_YEAR ='15'
AND JNL_PROCESSED ='N'
AND JNL_OBJ = 'TBBBB'
GROUP BY
JNL_OBJ, JNL_SUBJ
查询1的结果
JNL_OBJ JNL_SUBJ JNL_VALUE
---------------------------
TBBBB 9404 -547.78
TBBBB 9405 -24.39
查询2 - 代码TBBBB的年初至今值
SELECT
OBJ_FULL, SUBJ_FULL, ACT_YTD_TY
FROM
DB2ADM2.TFINCATP
WHERE
OBJ_FULL = 'TBBBB'
查询2的结果
OBJ_FULL SUBJ_FULL ACT_YTD_TY
-------------------------------
TBBBB 3420 12000
TBBBB 3473 18453.02
TBBBB 3524 2480.4
TBBBB 3704 585
TBBBB 6812 0
TBBBB 6910 0
TBBBB 7704 -4142.71
TBBBB 8199 -25
TBBBB 9400 -168363.1
TBBBB 9403 -457.56
TBBBB 9404 -9666.73
TBBBB 9405 -13098.05
TBBBB 9812 0
我要查找的结果是查询2,其中包含来自查询1的附加列,这是JNL_VALUE,但是因为每个TBBBB代码每周都没有日记,所以当前只返回带日记的行,该列如果当前值不存在,则必须插入0。
我有什么想法吗?
答案 0 :(得分:0)
你应该在这里LEFT OUTER JOIN
并在JOIN的JNLFILE
子句中限制ON
表,这样你就不会在加入后过滤结果,但之前(您也可以在子查询中完成:
SELECT B.OBJ_FULL,
B.SUBJ_FULL,
B.ACT_YTD_TY,
COALESCE(SUM(A.JNL_VALUE), 0) AS JNL_TOTAL
FROM DB2ADM2.TFINCATP B
LEFT OUTER JOIN DB2ADM2.JNLFILE A ON
B.OBJ_FULL = A.JNL_OBJ AND
B.SUBJ_FULL = A.JNL_SUBJ AND
A.JNL_YEAR = '15' AND
A.JNL_PROCESSED = 'N'
WHERE B.OBJ_FULL = 'TBBBB'
GROUP BY B.OBJ_FULL,
B.SUBJ_FULL,
B.ACT_YTD_TY
您可以将TFINCATP
视为您的"驱动程序"表,然后只从我们LEFT OUTER JOIN的JNLFILE
表中选取值。
答案 1 :(得分:0)
如果你想在没有A记录与B匹配时想要零:
SELECT B.OBJ_FULL, B.SUBJ_FULL, B.ACT_YTD_TY, isnull(A.JNL_VALUE, 0) AS JNL_VALUE
FROM DB2ADM2.JNLFILE A
Right Outer JOIN DB2ADM2.TFINCATP B ON B.OBJ_FULL = A.JNL_OBJ
AND B.SUBJ_FULL = A.JNL_SUBJ
WHERE A.JNL_YEAR ='15'
AND A.JNL_PROCESSED ='N'
AND OBJ_FULL = 'TBBBB'
(在外连接上搜索:有左,右和全外连接。)因为你想要每个B行,所以我删除了Group By。并且即使没有匹配的A,也要放入正确的外部联接以获得所有B。