我有两张桌子:
表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/

10-10 16:49