Re:转置动态表--SQL

时间:2011-12-21 09:31:03

标签: sql-server-2008

我有一个动态列动态创建的表。列A和列B是静态的,其余列是根据另一个表的结果动态创建的。请考虑以下示例代码

SELECT dutydate, dayname, shifts, myShift
    FROM   
       (SELECT column A, column B, dynamic column C, dynamic column D, dynamic column E, ...... (columns may increase)
           FROM temp) p
   UNPIVOT  
   (myShift FOR shifts IN ( dynamic column C, dynamic column D, dynamic column E, ...... (columns may increase) ))
AS unpvt;
临时表是动态创建的表。有没有办法根据上述情况进行转置。

1 个答案:

答案 0 :(得分:0)

您没有编写如何使用动态列创建表格。你可以做的是将命令创建为包含列表的字符串,然后只执行字符串。

declare @cmd varchar(max), @list_of_dynamic_columns varchar(255)
set @list_of_dynamic_columns = 'co1, col2, col2'

set @cmd = 'SELECT dutydate, dayname, shifts, myShift
    FROM   
       (SELECT column A, column B, '+@list_of_dynamic_columns +' 
           FROM temp) p
   UNPIVOT  
   (myShift FOR shifts IN ( '+@list_of_dynamic_columns +' ))
AS unpvt;'

print @cmd -- to see what you executed
exec (@cmd)

您需要做的只是在@ list_of_dynamic_columns

中创建列表