Я пытаюсь найти более эффективный способ найти среднегодовой баланс для счетов в таблице SQL.
Количество дней для каждого периода указано ниже, есть ли более эффективный способ кодирования этого? Сама таблица #TEMPAVG представляет собой свод полей с Period, содержащим данные. (Точки в столбцах с #, строки содержат все остальные поля)
Среднегодовой баланс рассчитывается путем суммирования каждого периода времени, умножения на количество дней, а затем деления на общее количество дней.
Я попытался вставить эти значения дня в таблицу #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');
Дни для периода Avgs
-- 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]