在sql server中动态生成列名

时间:2015-12-22 08:45:01

标签: sql-server

请查看以下查询..

select name as [Employee Name] from table name.

我想根据其他列值动态生成[Employee Name]

以下是示例表

s_dt    dt01    dt02    dt03
2015-10-26      

我希望dt01值显示为列名26dt02列值将为26+1=27

3 个答案:

答案 0 :(得分:2)

我不确定我是否理解正确。如果我走向错误的方向,请为您的问题添加评论,以使其更加准确。

如果你真的想为每个sql创建列,你可以试试这个脚本的变体:

chrome.runtime.sendMessage(chrome.runtime.id, {
    msg: data
},
function(response) {});

要从另一个查询中检索列名,请在上述声明之间插入以下内容并根据需要填充占位符:

DECLARE @name NVARCHAR(MAX) = 'somename'

DECLARE @sql NVARCHAR(MAX) = 'ALTER TABLE aps.tbl_Fabrikkalender ADD '+@name+' nvarchar(10) NULL'

EXEC sys.sp_executesql @sql;

答案 1 :(得分:1)

您需要动态地将SQL构建为字符串然后执行它。像这样......

DECLARE @s_dt INT
DECLARE @query NVARCHAR(MAX)

SET @s_dt = (SELECT DATEPART(dd, s_dt) FROM TableName WHERE 1 = 1) 

SET @query = 'SELECT s_dt'
  + ', NULL as dt' + RIGHT('0' + CAST(@s_dt as VARCHAR), 2)
  + ', NULL as dt' + RIGHT('0' + CAST((@s_dt + 1) as VARCHAR), 2)
  + ', NULL as dt' + RIGHT('0' + CAST((@s_dt + 2) as VARCHAR), 2)
  + ', NULL as dt' + RIGHT('0' + CAST((@s_dt + 3) as VARCHAR), 2)
  + ' FROM TableName WHERE 1 = 1)

EXECUTE(@query)

您需要在上面的两个地方替换WHERE 1 = 1来选择您的数据,同时将TableName更改为您的表名,并且它当前将NULL作为动态列数据,您可能还需要其他东西。

解释它在做什么:

SET @s_dt正在从表中选择日期值,并仅将日期部分作为INT返回。

SET @query根据日期部分(@s_dt)动态构建SELECT语句。

每一行都是@s_dt,添加0,1,2,3等,转换为VARCHAR,向左添加'0'(因此长度至少为2个字符)然后取正确的两个字符( '0'和右操作只是确保10以下的任何一个都有一个前导'0'。

答案 2 :(得分:0)

可以使用动态SQL执行此操作,但是我也会考虑查看数据透视运算符,看看它们是否能够更有效地实现您的目标。

https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx