如何取动态的日期列名?
我要查询最近12个月的数据,列名也要动态显示,比如我在今天查询,字段名要分别为:2013年1月、2013年2年、……、2013年12月。
当我在下个月再查询此报表的时候,字段名要分别为:2013年2月、2013年3年、……、2014年1月。
这个动态的列名要怎样实现?
------解决方案-------------------- 引用: Quote: 引用: 你得给出你的表,这样就可以结合上面的代码,来写出动态的sql了。select 客户, sum(case when datediff(month,_date,getdate())=1 then 销售金额 else 0 end) as [2013年12月], sum(case when datediff(month,_date,getdate())=2 then 销售金额 else 0 end) as [2013年11月], sum(case when datediff(month,_date,getdate())=3 then 销售金额 else 0 end) as [2013年10月], sum(case when datediff(month,_date,getdate())=4 then 销售金额 else 0 end) as [2013年9月], sum(case when datediff(month,_date,getdate())=5 then 销售金额 else 0 end) as [2013年8月], sum(case when datediff(month,_date,getdate())=6 then 销售金额 else 0 end) as [2013年7月], sum(case when datediff(month,_date,getdate())=7 then 销售金额 else 0 end) as [2013年6月], sum(case when datediff(month,_date,getdate())=8 then 销售金额 else 0 end) as [2013年5月], sum(case when datediff(month,_date,getdate())=9 then 销售金额 else 0 end) as [2013年4月], sum(case when datediff(month,_date,getdate())=10 then 销售金额 else 0 end) as [2013年3月], sum(case when datediff(month,_date,getdate())=11 then 销售金额 else 0 end) as [2013年2月], sum(case when datediff(month,_date,getdate())=12 then 销售金额 else 0 end) as [2013年1月] from 表 where datediff(month,_date,getdate()) between 1 and 12 group by 客户 当我在下个月查询同样的语句,列名要分别为2014年1月、2013年12月、……、2013年2月。目前的语句列名是固定的,不是我想要的。要怎样写语句呢?这样:
declare @sql nvarchar(4000) set @sql = '' select @sql = @sql + ',sum(case when datediff(month,_date,getdate())=' + cast(number+1 as varchar) + ' then 销售金额 else 0 end) as [' + datename(year,DATEADD(MONTH,number,GETDATE()))+'年' + datename(month,DATEADD(MONTH,number,GETDATE()))+'月]' from master..spt_values where type ='P' and number <=11 select @sql = 'select 客户'+ @sql + ' from 表 where datediff(month,_date,getdate()) between 1 and 12 group by 客户' select @sql