Sql 滚动总和-逐年/按月
我试图将多个帐户组合在一起,同时保持滚动/更新余额。使用一个帐户进行查询:Sql 滚动总和-逐年/按月,sql,sql-server,Sql,Sql Server,我试图将多个帐户组合在一起,同时保持滚动/更新余额。使用一个帐户进行查询: SELECT FiscalPeriod, BalanceAmt, SUM(balanceamt) OVER(ORDER BY fiscalperiod) as BalanceAmt FROM EpicorLive10.Erp.GLPeriodBal WHERE FiscalYear = '2018' AND BalanceAcct IN ('01260|0000|000') GROUP BY fiscalp
SELECT FiscalPeriod, BalanceAmt,
SUM(balanceamt) OVER(ORDER BY fiscalperiod) as BalanceAmt
FROM EpicorLive10.Erp.GLPeriodBal
WHERE FiscalYear = '2018'
AND BalanceAcct IN ('01260|0000|000')
GROUP BY fiscalperiod,BalanceAmt
ORDER BY FiscalPeriod
输出
有两个帐户输出:
如您所见,它不会将两个帐户组合在一起
我想做的是添加几个帐户,对12行会计期间/年度内的所有内容进行合计/分组
最终,我需要:
任何建议都将不胜感激
--UPDATE** Current Query**
select Datex, balanceamt into #temp
FROM EpicorLive10.Erp.GLPeriodBal as A
JOIN EpicorLive10.dbo.Date_Fiscal as B
ON a.FiscalPeriod = b.Fiscal_Period and a.FiscalYear = b.Fiscal_Year
WHERE FiscalYear = '2018'
AND BalanceAcct IN (
'01260|0000|000',
'01261|0000|000',
'01262|0000|000',
'01263|0000|000',
'01264|0000|000',
'01555|0000|000',
'01560|0000|000',
'01245|0000|000',
'01250|0000|000')
GROUP BY Datex,BalanceAmt
declare @rollup table (rollupid int identity, fiscalperiod int, balanceamt float)
insert @rollup
select Datex, sum(balanceamt) from #temp
group by Datex
order by Datex
declare @holding table (fiscalperiod int, balanceamt float, runningbal float)
declare @iterator int=0
declare @currentbal float =0
while @iterator<=(select max(rollupid) from @rollup) begin
select @currentbal=@currentbal+balanceamt from @rollup where fiscalperiod=@iterator
insert @holding
select fiscalperiod, balanceamt, @currentbal from
@rollup where
fiscalperiod=@iterator
set @iterator=@iterator+1
end
select * from @holding
drop table #temp
科目表:
日期\u会计表:以下是如何将窗口函数与聚合一起使用:
SELECT FiscalPeriod, BalanceAmt,
SUM(SUM(balanceamt)) OVER (ORDER BY fiscalperiod) as BalanceAmt
FROM EpicorLive10.Erp.GLPeriodBal
WHERE FiscalYear = '2018' AND BalanceAcct IN ('01260|0000|000')
GROUP BY fiscalperiod
ORDER BY FiscalPeriod;
请注意,您的输入看起来很奇怪。它看起来更像是SQL Server不支持的正则表达式
SUMSUM一开始看起来很奇怪,但你很快就会习惯的。内部和来自聚合。外部和用于窗口函数
select Datex, balanceamt into #temp
FROM EpicorLive10.Erp.GLPeriodBal A
JOIN EpicorLive10.dbo.Date_Fiscal B
ON a.FiscalPeriod = b.Fiscal_Period and a.FiscalYear = b.Fiscal_Year
WHERE FiscalYear = '2018'
AND BalanceAcct IN (
'01260|0000|000',
'01261|0000|000',
'01262|0000|000',
'01263|0000|000',
'01264|0000|000',
'01555|0000|000',
'01560|0000|000',
'01245|0000|000',
'01250|0000|000')
GROUP BY Datex, BalanceAmt
declare @rollup table (rollupid int identity, Datex datetime, balanceamt float)
insert @rollup
select Datex, sum(balanceamt) from #temp
group by Datex
order by Datex
declare @holding table (Datex datetime, balanceamt float, runningbal float)
declare @iterator int=1
declare @currentbal float =0
while @iterator<=(select max(rollupid) from @rollup) begin
select @currentbal=@currentbal+balanceamt from @rollup where @iterator=rollupid
insert @holding
select Datex, balanceamt, @currentbal from
@rollup where @iterator=rollupid
set @iterator=@iterator+1
end
select * from @holding
drop table #temp
账目是什么?是0126000000&000吗?
如果是,您的输入将为“01260”、“0000”、“000”
这是未经测试,但我采取了类似的一个我
希望有帮助您想要的输出是什么?基本上-我希望合并帐户。Gordon的答案对您有用吗?在第二个输出中,有两个帐户,将两个帐户分开;两个财政年度。我希望按会计期间对每个账户进行汇总。第3列显示期初余额减去第2列余额金额。好的,请参见下面的答案Sumsum。。。在我的蜥蜴大脑中,我总是使用子查询或CTE来完成这个任务。@CGiles。你是OP,可以选择任何你喜欢的答案。但我无法理解为什么你会选择一个更长、更复杂、性能更低的解决方案。不,账户实际上是第一组数字。丹尼尔的回答是解决方案。谢谢
SELECT FiscalPeriod, Sum(BalanceAmt),
SUM(balanceamt) OVER(ORDER BY fiscalperiod ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as BalanceAmt
FROM EpicorLive10.Erp.GLPeriodBal
WHERE FiscalYear = '2018'
AND BalanceAcct IN ('01260|0000|000')
GROUP BY fiscalperiod,BalanceAmt
ORDER BY FiscalPeriod