sql - 反转 SQL 表中的所有列

标签 sql sql-server sql-server-2008-r2 unpivot

我有一个包含 30 列的表格,我想轻松地取消旋转所有列。我知道我可以使用这个策略:

SELECT col, value 
INTO New_Table
FROM
(SELECT * FROM Test_Data) p
UNPIVOT
(value FOR col IN (Column_Name1, Column_Name2... Column_Name30)) as unpvt

我的数据是这样输入的:
Column_Name1    Column_Name2    Column_Name3
Value11         Value21         Value31
Value12         Value22         Value32
Value13         Value23         Value33

这就是我想将它存储在新表中的方式:
New_Column1    New_cloumn2
Column_Name1   Value11
Column_Name1   Value12
Column_Name1   Value13
Column_Name2   Value21
...

但是必须有比输入 30 个列名称更简单的方法。

提前致谢。

最佳答案

这似乎是一个损坏的数据模型,但您可以避免输入列列表。

您可以使用它来生成列列表:

SELECT name
FROM sys.columns
WHERE objecT_id = OBJECT_ID('Test_Data')

和:
DECLARE @List VARCHAR(MAX) = STUFF((SELECT DISTINCT ',' +   QUOTENAME(name)                     
                                    FROM sys.columns
                                    WHERE objecT_id = OBJECT_ID('Test_Data')                                    
                                    FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)') 
                                    ,1,1,'')
PRINT @List

然后您可以在动态 sql 语句中使用该列表:
DECLARE @List VARCHAR(MAX) = STUFF((SELECT DISTINCT ',' +   QUOTENAME(name)                     
                                    FROM sys.columns
                                    WHERE objecT_id = OBJECT_ID('Test_Data')                                    
                                    FOR XML PATH(''), TYPE).value('.', 'VARCHAR(MAX)') 
                                    ,1,1,'')
        ,@sql VARCHAR(MAX)
SET  @sql  =  'SELECT  col,value  
               INTO New_Table
               FROM  (SELECT  *  FROM  Test_Data)  p
               UNPIVOT (value  FOR  col  IN  ('+@List+'))  as  unpvt
              '
EXEC  (@sql)  

我建议使用 PRINT (@sql)使用前 EXEC以确保动态查询是您所追求的。

关于sql - 反转 SQL 表中的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21996988/

相关文章:

mysql - mysql插入的格式化日期

sql - Postgres - 拆分数字和字母不填充列

java - 处理 java.lang.NullPointerException 错误

sql-server - 非分区表的 sys.partition 中的多个记录

php - 使用 PHP 将表单数据保存到现有的 XML 文件

C# SQL Server 存储过程参数返回列表

调查结果的 SQL 问题

c# - T-SQL LIKE与ASP.net参数中的通配符

sql - 批量插入 - UNIX 文件的行终止符 + "\l"行终止符

SQL Server 2008根据机器设置获取DATETIMEOFFSET