请查看以下查询..
select name as [Employee Name] from table name.
我想根据其他列值动态生成[Employee Name]
。
以下是示例表
s_dt dt01 dt02 dt03
2015-10-26
我希望dt01
值显示为列名26
,dt02
列值将为26+1=27
答案 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