统计销售金额,按本日,本月,本季度跟本年来

统计销售金额,按本日,本月,本季度和本年来

出货日期      料号    出货金额
2014-1-1     a           300
2014-1-2     a           300
2014-1-1     a           300
2014-1-2     a           300
2014-1-2     a           300
2014-1-1     a           300
2014-1-1     b           300
2014-1-1     c           300
2014-1-1     a           300
2013-1-1     a           300
2013-12-1    a           300
2013-12-1     a           300
2013-12-1     b           300
2013-12-1     c           300
2014-1-1     a           300
写出查询语句,假设本日是2014-1-2,本月是1月分别按本日统计
本日销售金额     昨天销售金额  去年同期销售金额

本月销售金额     上月销售金额  去年同期销售金额

本季度销售金额     上季度销售金额  去年同期销售金额

------解决方案--------------------
嗯 ,貌似少写了一点

重新写一个吧
先创建一个过程
create proc tj
@da varchar(10)
as
declare @s varchar(3000)
set @s='
select sum(case when 出货日期='''+ @da +''' then 出货金额 else 0 end) as 当日销量, sum(case when 出货日期=dateadd(dd,-1,'''+ @da +''') then 出货金额 else 0 end) as 昨日销量, sum(case when 出货日期=dateadd(yy,-1,'''+ @da +''') then 出货金额 else 0 end) as 去年同期销售金额,
sum (case when datediff(mm,出货日期,'''+ @da +''')=0 then 出货金额 else 0 end) 本月销量,sum (case when datediff(mm,出货日期,'''+ @da +''')=1 then 出货金额 else 0 end) 上月销量, sum (case when datediff(mm,出货日期,'''+ @da +''')=12 then 出货金额 else 0 end) 去年同期,
 sum (case when datediff(qq,出货日期,'''+ @da +''')=0 then 出货金额 else 0 end) 本季度销量,sum (case when datediff(qq,出货日期,'''+ @da +''')=1 then 出货金额 else 0 end) 上季度销量, sum (case when datediff(qq,出货日期,'''+ @da +''')=4 then 出货金额 else 0 end) 去年同期
  from taba'
exec(@S)



调用的时候 

exec tj '2014-1-2'


结果

当日销量	昨日销量	去年同期销售金额	本月销量	上月销量	去年同期	本季度销量	上季度销量	去年同期
5100 2100 0 3000 1200 300 3300 1200 600