我有两张桌子:
表A:
Perspectiveid ColumnOrder UIDisplayName
-------------------------------------------
213 1 Alpha
213 2 Beta
213 3 Gamma
表B:列
Id, Col1, Col2, Col3
我希望最终结果如表B所示:
(`Id, Alpha, Beta, Gamma`)
也就是说,
Col1
中的table B
对应于ColumnOrder 1
中的table A
,应该用UIDisplayName[Alpha]
中的ColumnOrder 1
重命名。 最佳答案
可以使用pivot将行转换为列。您可以使用此链接获取有关pivotlink
供您查询:
; with cte as (
select Perspectiveid,cast(ColumnOrder as varchar(max)) as ColumnOrder,UIDisplayName from tableA)
select * into temptable from (
select Perspectiveid,ColumnOrder,UIDisplayName from cte
) as d
pivot (
max(ColumnOrder) for UIDisplayName in ( [Alpha], [Beta], [Gamma] )
) as P
这会给你结果
让这成为诱人的
Perspectiveid | [Alpha] | [Beta] | [Gamma]
213 1 2 3
之后从
temptable
中删除 delete from temptable
现在将数据从
yourtable
插入到此temptable
作为 insert into temptable ( Perspectiveid , [Alpha], [beta], [gamma] )
select id, col1, col2, col3 from #tableb
在那之后放下你的表格,然后把你的诱人的重新命名为表格
Drop table #tableB
GO
select * into #tableB from temptable
GO
Drop table temptable
或者
如果要分别更改每个列,请尝试以下操作
select ' exec sp_rename ''tableb.col' + cast(columnorder as varchar(5)) + ''', ''' + UIDisplayName + ''', ''COLUMN''' from tableA
这将为您提供单独执行和更改列名的查询。
关于sql - 通过将表列映射到其他表的列值来重命名表列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57268438/