这是我的数据样本:
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
我想要做的就是将此表与两年期中所有月末日期的表连接起来。即:
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的空观察,这是我想要的。
我该如何解决这个问题?
谢谢!
假设您的体重至少为10g,则可以使用Partition Outer Join:
select dt.dates, d.acct_id, d.amt
from table_dates dt
left outer join table_amt d partition by (acct_id)
on d.dates = dt.dates
order by d.acct_id, to_date(dt.dates);
有关此方法的更多信息,请阅读:http : //docs.oracle.com/cd/E11882_01/server.112/e25555/tdpdw_sql.htm#TDPDW00721
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句