SQL-запрос Суммарные значения Фактический год до даты и среднее значение с начала года

Мне нужен запрос, который суммирует расходы Фактический с начала года, Средний с начала года (из всех лет, каков мой средний год), Прошлый год с начала года

Мне нужно 3 части данных: Actual YTD | Среднее значение с начала года | Прошлые годы|

Это то, что у меня есть до сих пор:

select  SUM(Expenses)
        ,DATEADD(year, datediff(year,0,[Date]), 0) 
from    table1 
group by  
        DATEADD(year, datediff(year,0,[Date]), 0) 
) 

person Stone Temple Aviators    schedule 07.09.2012    source источник


Ответы (2)


Попробуй это:

DECLARE @currentYear int
SELECT @currentYear = DATEPART(year, GETDATE())

SELECT SUM(CASE WHEN DATEPART(year,[date]) = @currentYear 
    THEN Expenses ELSE 0 END) AS 'Actual YTD',
SUM(Expenses) / COUNT( DISTINCT DATEPART(year,[date])) AS 'Average YTD',
SUM(CASE WHEN DATEPART(year,[date]) = @currentYear -1 
    THEN Expenses ELSE 0 END) AS 'Last Year YTD'

FROM Table1

скрипт SQL

person András Ottó    schedule 07.09.2012
comment
сделал одно улучшение, где вы жестко закодировали 2012 год (CONVERT (VARCHAR (25), DATEADD (dd, - (DAY (getdate ()) - 1), getdate ()), 101)) - person Stone Temple Aviators; 07.09.2012
comment
Хорошая мысль от вас! А DATEPART(date, getdate()) еще проще. Я просто редактирую его сейчас. - person András Ottó; 07.09.2012
comment
О, да ... это то, что я искал, устал писать длинный фрагмент кода для форматирования даты. Спасибо. - person Stone Temple Aviators; 07.09.2012

Попробуй это

select 

    AVG(case when 
        [date]>=DATEADD(year, datediff(year,0,getDate())-1, 0)  and 
        [date]<DATEADD(year, datediff(year,0,getDate()), 0) 
        then Expenses end) 
        as average_ytd,

    sum(case when 
        [date]>=DATEADD(year, datediff(year,0,getDate())-1, 0)  and 
        [date]<DATEADD(year, datediff(year,0,getDate()), 0) 
        then Expenses else 0 end) 
        as actual_ytd,

    sum(case when 
        [date]>=DATEADD(year, datediff(year,0,getDate())-2, 0)  and 
        [date]<DATEADD(year, datediff(year,0,getDate())-1, 0) 
        then Expenses else 0 end) 
        as lat_year_ytd
from
    table1
person Madhivanan    schedule 07.09.2012
comment
Спасибо, Мадхиванан, я попробовал, почему я получил 0 за последние годы, так как есть данные за 2011 год. - person Stone Temple Aviators; 07.09.2012
comment
Разобрался - дата последнего года ищет между 1-2010 - 1-2011. Спасибо за помощь. - person Stone Temple Aviators; 07.09.2012