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