2016-04-26 78 views
4

我正在为销售人员每月收取佣金。我需要根据我运行查询的月份,使列名的更改。根据查询日期(月)更改列名称

当我在30/1/2016运行查询像那么coumn名字是commission for month 1commission for month January

当我运行像在30/3/2016查询,则coumn名字是commission for month 3commission for month March

我试过这段代码:

Select T0.commission as 'Commission for month month(getdate())' 

它不工作

+2

我想你会需要做动态。就个人而言,我不喜欢这样的结构,但我认为你坚持这个设置... – HoneyBadger

+1

任何给定的查询将始终生成具有固定形状的结果集 - 数字,*名称*和列的类型。你没有更好的地方来处理这种表现逻辑(例如报告前端或应用程序)吗? –

+0

另外,想象一下,如果它实际上是这样做的,那么在SQL Server中进行编程会有多混淆,“如果一个字符串碰巧包含类似于表达式的东西,评估表达式并将其替换为所获得的值”。 –

回答

3

该查询将返回一些虚拟数据(表名称从系统视图中删除。该柱将与动态生成的字符串,命名为:

DECLARE @cmd VARCHAR(MAX)='SELECT TABLE_NAME AS [' + 'placeYourColHere_' + CAST(MONTH(GETDATE()) AS VARCHAR(10)) + '] FROM INFORMATION_SCHEMA.TABLES;'; 
EXEC(@cmd); 
1

请尝试此查询

select 'Commission for month ' + CONVERT(NVARCHAR(2),DATEPART(MM,GETDATE())) AS 'Date' 
+0

不错的想法,值得赞赏......但是我们不知道OP的查询将返回多少行,并且一遍又一遍地重复这个可能不是解决方案... – Shnugo

+0

但是你的代码工作正常,我的只是返回作为列数据而不是列 –