填写整个月的运行总数,尽管它为空

时间:2017-08-21 13:10:40

标签: sql sql-server join

我有2张桌子。只有所有时期的一个。其次是账户,金额和期限。

我想构建一个列出金额累计,期间和帐户的视图。此外,如果我在表格中没有一段时间的事实,则应在我的视图中显示最后一个金额的期间。

select distinct 
    account, b.periode, 
    SUM(amount) OVER (PARTITION BY account ORDER BY b.periode RANGE UNBOUNDED PRECEDING) 
from 
    fakten a
full join 
    perioden b on a.periode = b.periode
order by b.periode

它是这样的:

1       1   6
2       1   4
1       2   13
2       2   3
NULL    3   NULL
1       4   46
2       5   48
NULL    6   NULL
NULL    7   NULL
1       8   147
NULL    9   NULL
NULL    10  NULL
NULL    11  NULL
NULL    12  NULL

我需要它:

1       1   6
2       1   4
1       2   13
2       2   3
1       3   13
2       3   3
1       4   46
2       4   3
1       5   46
2       5   48
1       6   46
2       6   46
and so one...

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

full join不是正确的做法。而是使用cross join生成所需的行。然后使用left joingroup by进行计算。

select a.account, p.periode, 
       SUM(f.amount) OVER (PARTITION BY a.account ORDER BY p.periode) 
from (select distinct account from fakten) a cross join -- you probably have an account table, use it
     perioden p
     on a.periode = p.periode left join
     fakten f
     on f.account = a.account and f.periode = p.periode
group by a.account, p.periode
order by a.account, p.periode;