步骤:
1.从表中查询数据,进行按月分组。
2.与临时表关联
Create table tb(日期 Varchar(10),时间 Varchar(10),价格 float)
insert tb values('2009-01-01','02:00:00','12.55')
insert tb values('2009-02-22','02:00:00','26.55')
insert tb values('2009-01-22','04:00:00','10.52')
insert tb values('2009-02-22','06:00:00','23.55')
insert tb values('2009-03-22','08:00:00','52.65')
insert tb values('2009-04-22','10:00:00','23.21')
insert tb values('2009-05-22','12:00:00','32.55')
insert tb values('2009-06-22','14:00:00','15.54')
insert tb values('2009-01-22','16:00:00','18.44')
insert tb values('2009-02-22','18:00:00','20.10')
insert tb values('2009-03-22','20:00:00','34.48')
insert tb values('2009-04-22','22:00:00','18.55')
insert tb values('2010-05-23','00:00:00','42.51')
insert tb values('2010-05-23','02:00:00','36.64')
insert tb values('2011-05-23','04:00:00','66.22')
insert tb values('2012-05-23','06:00:00','54.41')
select 日期,avg(价格) as 平均价格 from tb Group by 日期
GO
create proc wsp
@year int
as
declare @i int
set @i=1
--当前年1-12月表
declare @t table (dt varchar(10))
while @i<=12
begin
if @i<10
insert @t values(cast(@year as char(4))+'-0'+cast(@i as varchar))
else
insert @t values(cast(@year as char(4))+'-'+cast(@i as varchar))
set @i=@i+1
end
--和临时表关联
select b.dt,ISNULL(tt.价格,0) as价格 from
(
select CONVERT(VARCHAR(7),aa.日期,120) as 日期,SUM(aa.价格) as 价格
from tb as aa group by CONVERT(VARCHAR(7),aa.日期,120)
) as tt right join @t as b on tt.日期=b.dt
union all
select f1= '总计' , sum(价格) 价格 from tb where year(tb.日期)=@year
go
--执行
exec wsp 2009