【发布时间】:2016-04-19 09:47:09
【问题描述】:
假设我有以下数据:
select 1 id, 'A' name, '2007' year, '04' month, 5 sales from dual union all
select 2 id, 'A' name, '2007' year, '05' month, 2 sales from dual union all
select 3 id, 'B' name, '2008' year, '12' month, 3 sales from dual union all
select 4 id, 'B' name, '2009' year, '12' month, 56 sales from dual union all
select 5 id, 'C' name, '2009' year, '08' month, 89 sales from dual union all
select 13 id,'B' name, '2016' year, '01' month, 10 sales from dual union all
select 14 id,'A' name, '2016' year, '02' month, 8 sales from dual union all
select 15 id,'D' name, '2016' year, '03' month, 12 sales from dual union all
select 16 id,'E' name, '2016' year, '04' month, 34 sales from dual
我想累计所有年份及其各自时期(月)的所有销售额。输出应如下所示:
name year month sale opening bal closing bal
A 2007 04 5 0 5
A 2007 05 2 5 7
B 2008 12 3 12 15
A 2008 04 0 5 5 -- to be generated
A 2008 05 0 7 7 -- to be generated
B 2009 12 56 15 71
C 2009 08 89 71 160
A 2009 04 0 5 5 -- to be generated
A 2009 05 0 7 7 -- to be generated
B 2016 01 10 278 288
B 2016 12 0 71 71 -- to be generated
A 2016 02 8 288 296
A 2016 04 0 5 5 -- to be generated
A 2016 05 0 7 7 -- to be generated
D 2016 03 12 296 308
E 2016 04 34 308 342
C 2016 08 0 160 160 -- to be generated
期初余额为上个月的期末余额,如果进入下一年,则下一年的期初余额为上一年的期末余额。在接下来的几年里,它应该能够像这样工作。我已经让这部分工作了。但是,我不知道如何解决 2008 年存在的 2009 年缺少的问题。例如,密钥 A,2008,04 和 A,2008,05 在 2009 年不存在,代码应该能够添加它在 2009 年就像上面一样。其他年份和月份也是如此。
我正在开发 Oracle 12c。
提前致谢。
【问题讨论】:
-
您的示例数据是否输入错误?您的输出数据引用 A、2007、04 和 05,但在您的样本数据中,您有 A、2007、04 但有 B、2007、05。另外,“后续年份”是什么意思?这是从 2007 年到现在的所有年份,还是只是数据中存在的年份(例如 2007、2008、2009 和 2016 年)?附: 感谢您提供的示例数据!很难以这种方便的形式获取数据! *{:-D
-
我那里没有 B, 2007,05。我自己看不到:S
-
select 2 id, 'B' name, '2007' year, '05' month, 2 sales from dual union all -
我需要创建一个表格,其输出内容如上所示。这样,我的累积添加值的分析函数将完美运行。由于数据现在在 union alls 上面,因此分析功能不起作用。因为如果 2009 年缺少的组合键在 2008 年存在,那么 2009 年将不会被拾取。
-
为什么 B/2008/12 的期初余额为 12,C/2009/08 的期初余额为 71 等 - 而不是零?这些数字是从哪里来的——你是在假设你没有显示的其他数据吗?