将列名动态添加到临时表中,因为列名来自另一个表的字段值

问题描述 投票:0回答:1

我有一个物理表,可以在其中使用表中的select fieldvalue选择一个字段值。我需要将这些结果字段值作为模板的列,并将另一个fieldvalue作为基于fieldvalue的对应列值。

例如:从phytable中选择KeyField,ValueFile

假设KeyField X,Y,Z ValueFileld分别是A,B,C X-> A

我需要带有X,Y,Z的Temp表作为temptable的列名,而A,B,C作为对应列的行值。

sql-server pivot dynamic-sql
1个回答
0
投票

我已经使用动态查询完成了同样的工作。

遵循的步骤

  • 将字段值插入临时表
  • 遍历临时表
  • 按列获取每一列1
  • 在内部循环中写入新临时表的alter table add column语句

    // -------查询片段-------- //

    SELECT Name into #ControlTable FROM Tbl_A
    WHILE exists (SELECT [Name] FROM #ControlTable)
    BEGIN
    SELECT TOP 1 @columnname=[Name] FROM #ControlTable
    @alterqry="ALTER TABLE Tbl_B Add column '+@columnname+' varchar(50)"
    EXECUTE(@alterqry)
    DELETE FROM #ControlTable WHERE [Name]=@columnname
    END
    
© www.soinside.com 2019 - 2024. All rights reserved.