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阶段之前的问题。