【发布时间】:2014-08-10 08:04:32
【问题描述】:
这是我的数据示例:
DATES ACCT_ID AMT
31-JAN-13 0000000117 137.6
31-MAY-13 0000000117 245.96
30-JUN-13 0000000117 8162.97
31-JUL-13 0000000117 158.85
31-OCT-13 0000000117 55.44
30-NOV-13 0000000117 0
31-JAN-14 0000000117 485.78
28-FEB-14 0000000117 588.28
31-MAR-14 0000000117 2315.56
31-JAN-13 0000000133 8291.45
30-APR-13 0000000133 21241.54
31-JUL-13 0000000133 22185.75
31-AUG-13 0000000133 19770.89
30-NOV-13 0000000133 15168.48
31-DEC-13 0000000133 11376.65
28-FEB-14 0000000133 11910.58
31-MAR-14 0000000133 8893.84
30-APR-14 0000000133 12093.9
我想要做的是将这个表与一个包含 2 年范围内所有月末日期的表连接起来。即:
DATES
31-JAN-13
28-FEB-13
31-MAR-13
30-APR-13
31-MAY-13
30-JUN-13
31-JUL-13
31-AUG-13
30-SEP-13
31-OCT-13
30-NOV-13
31-DEC-13
31-JAN-14
31-JAN-14
28-FEB-14
31-MAR-14
30-APR-14
对于原始表中没有值的每个日期,我想在结果中显示它,复制 ACCT_ID,并让 AMT 为null。
例如,我想要:
31-JAN-13 0000000117 137.6
28-FEB-13 0000000117 null
31-MAR-13 0000000117 null
30-APR-13 0000000117 null
31-MAY-13 0000000117 245.96
......
我当前代码的简化版本是:
select * from table_amt
right join table_dates
using (acct_id)
order by (dates)
但是,简单的右连接不起作用,因为我正在跨不同帐户执行join。例如,请注意帐户 0000000117 的 31-MAY-13 有一条记录,但没有 0000000133 的记录,在我的结果中,对日期 31-MAY-13 和帐户 0000000133 的观察结果为空,并且未按我的意愿添加帐户 0000000133。
我该如何解决这个问题?
谢谢!
【问题讨论】:
-
那么您使用的查询是什么?如果没有实际代码,很难解决您的代码问题......外部连接应该足以获得您描述的结果集。拥有您想要的结果集的表示也会很有用。
-
复制什么账号?如果它不在原始表中,则没有帐户 ID 对吗?
-
ACCT_ID在另一个表中吗?如果是这样,为什么不将ACCT_ID添加到On子句中?
标签: sql oracle join oracle-sqldeveloper