在sql中将多列转换为2列并将单行转换为多行

Bhu*_*ban 1 sql-server sql-server-2008-r2

使用Select top 1语句我必须从没有任何唯一键的 8 列表中检索数据。现在我想将此表转换为两列:原始列名到第一列,其各自的值到第二列。

像这样的原始表:

Column1 | Column2 | Column3 | Column4 
55      | 108     | 555     | 85
Run Code Online (Sandbox Code Playgroud)

和预期的结果:

ColumnName | Value
Column1    | 55
Column2    | 108
Column3    | 555
Column4    | 85
Run Code Online (Sandbox Code Playgroud)

Rob*_*ley 5

有一个名为 T-SQL 的构造UNPIVOT就是为此而设计的。但根据我的经验,APPLY按照我下面的代码,你会更幸运:

SELECT *
FROM YourTable t
CROSS APPLY
    (SELECT 'Col1', Column1
    UNION ALL
    SELECT 'Col2', Column2
    UNION ALL
    SELECT 'Col3', Column3
    UNION ALL
    SELECT 'Col4', Column4
   ) u (columnName, Value)
  ;
Run Code Online (Sandbox Code Playgroud)