我正在尝试找到一种更有效的方法来在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]