Sql 填写整个月的运行总计,尽管其为空

Sql 填写整个月的运行总计,尽管其为空,sql,sql-server,join,Sql,Sql Server,Join,我有两张桌子。一个只有所有周期。第二个是账户、金额和期限 我想建立一个视图,列出金额、期间和帐户。此外,如果我的表中没有某个期间的事实,则应在我的视图中显示该期间的最后金额 select distinct account, b.periode, SUM(amount) OVER (PARTITION BY account ORDER BY b.periode RANGE UNBOUNDED PRECEDING) from fakten a full join

我有两张桌子。一个只有所有周期。第二个是账户、金额和期限

我想建立一个视图,列出金额、期间和帐户。此外,如果我的表中没有某个期间的事实,则应在我的视图中显示该期间的最后金额

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...

有什么想法吗?

完全连接
不是正确的方法。相反,使用
交叉联接生成所需的行。然后使用
left join
group 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;

大家好,欢迎来到SO。我们需要更多的细节才能在这里提供帮助。这是一个很好的起点。也许问题中关于:NULL 3 NULL如何转化为:1 3 13的一些细节将有助于人们回答第12阶段之前的问题。