2012-09-07 111 views
3

我需要一个查询,总计支出实际年迄今,平均YTD(所有年份,我的平均年度),去年YTDSQL查询总计值实际年迄今和平均YTD

我需要3件数据:Actual YTD |平均YTD |去年|

这是我到目前为止有:

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

回答

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 Fiddle

+0

非常好...我从你们那里学到很多东西。 –

+0

做了一个改进,你硬编码2012年(CONVERT(VARCHAR(25),DATEADD(dd, - (DAY(getdate()) - 1),getdate()),101)) –

+0

您好!而DATEPART(date,getdate())更容易。我现在只是简单地编辑它。 –

1

试试这个

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 
+0

感谢Madhivanan,我尝试过了,为什么我会在去年ytd得到0,有da ta for 2011 –

+0

想通了 - 去年的日期正在寻找1-2010 - 1- 2011.感谢您的帮助。 –