首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么取动态的日期列名

2014-01-05 
如何取动态的日期列名?我要查询最近12个月的数据,列名也要动态显示,比如我在今天查询,字段名要分别为:2013

如何取动态的日期列名?
我要查询最近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

热点排行