SQL Рассчитать среднегодовой баланс для прогноза - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь найти более эффективный способ найти среднегодовой баланс для счетов в таблице 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]
...