SQL搜索近12个月的数据

企业应用经常用图表来展示用户数据情况,便于企业决策分析;常用的例子就是展示近十二个月的数据(当前月向前起向前推12个月)分布。效果图如下:

SQL搜索近12个月的数据_第1张图片


那么就要对数据库的数据进行钻取,不管数据库中某个月是否有数据,都要将这个月钻取出来,也就是近十二个月的列是固定的,简单设计一个数据表结构,有如下几条数据:

Id

MYear

MMonth

data

100

2013

10

12.5

101

2014

1

NULL

102

2014

8

14

(2014年9月之前的12个月数据)希望搜出结果如下:

2013年10月

12.5

2013年11月

NULL

2013年12月

NULL

2014年1月

NULL

2014年2月

NULL

2014年3月

NULL

2014年4月

NULL

2014年5月

NULL

2014年6月

NULL

2014年7月

NULL

2014年8月

14

2014年9月

NULL

declare @year int 
declare @month int 

set @year=2014
set @month=9
if(@month!=12)
	begin
	   set @month=@month+1
	   set @year=@year-1
	end
else
	begin 
		set @month=1
end
declare @sql varchar(max)
declare @num int 
set @num =12
  set @sql = ' '
while(@num>0) 
begin  
    set @sql += 'select ' 
    set @sql += '('''
    set @sql +=convert(varchar(10), @year)
    set @sql += '年' 
    set @sql += convert(varchar(5), @month)
    set @sql += '月'
    set @sql += ''') as 年月 '   
   set @sql += '  , (select data from p_data a where MYear= '
   set @sql += convert(varchar(10), @year)+' and MMonth= '+ convert(varchar(5), @month)
   set @sql+=')as data'
   if (@num!=1) 
    begin  
      set @sql += ' union all '  + CHAR(13)+CHAR(10) 
    end 
   set @num = @num-1
   set @month = @month+1
   
   if(@month=13)
    begin
      set @month =1 
      set @year = @year+1
    end  
   end  
--  print @sql 
 execute(@sql)


你可能感兴趣的:(数据库)