SQL计算年度平均余额以进行预测

时间:2019-03-21 13:55:23

标签: sql average essbase

我正在尝试找到一种更有效的方法来在SQL表中查找帐户的年平均余额。

下面列出了每个时间段的天数,是否有更有效的方法对此进行编码? #TEMPAVG表本身是带有Period的字段的枢纽,其中包含数据。 (在带有#的列上,行包含所有其他字段)

年平均余额是通过汇总每个时间段,乘以天数,然后除以总天数来计算的。

我试图将这些Day值插入#TEMPDAYS表中,但无法弄清楚如何正确地添加数据以进行时间段的乘法。

TEMP DAYS表

    INSERT INTO #TEMPDAYS(Period,Days)
    VALUES
    ('P01','30'),('P02','31'),('P03','31'),('P04','28'),('P05','31'),('P06','30'),('P07','31'),('P08','30'),('P09','31'),('P10','31'),('P11','30'),('P12','31')
    ,('Jan','31'),('Feb','28'),('Mar','31'),('Apr','30'),('May','31'),('Jun','30'),('Jul','31'),('Aug','31'),('Sep','30'),('Oct','31'),('Nov','30'),('Dec','31');

平均期间的天数

-- DAYS FOR EACH PERIOD ('P01','30'),('P02','31'),('P03','31'),('P04','28'),('P05','31'),('P06','30'),('P07','31'),('P08','30'),('P09','31'),('P10','31'),('P11','30'),('P12','31')

最后一个期间P12的年平均余额计算

SELECT  
PERIOD='P12'
,[Account],[BOA],[OrgUnit],[AverageBalance]='YAB',[AmountType]='I',[Years],[Currency],[Scenario],[Version],[IntExt]
            ,ROUND(
                    (
                    SUM(P01)*30 + SUM(P02)*31 + SUM(P03)*31 + 
                    SUM(P04)*28 + SUM(P05)*31 + SUM(P06)*30 + 
                    SUM(P07)*28 + SUM(P08)*31 + SUM(P09)*30 + 
                    SUM(P10)*28 + SUM(P11)*31 + SUM(P12)*30
                    )
                    /(30 + 31 + 31 + 
                    28 + 31 + 30 +
                    31 + 30 + 31 +
                    31 + 30 + 31
                    )
                ,2)
              AS DATA
            ,[DataSource]= [DataSource]+' Avg'
        FROM #TEMPAVG
            GROUP BY [Account],[BOA],[OrgUnit],[Years],[Currency],[Scenario],[Version],[IntExt],[DATASOURCE]

0 个答案:

没有答案