将列转换为SQL Server中的行

时间:2015-12-14 12:24:54

标签: sql-server sql-server-2012

我有一个场景需要将列转换为行。我有两个表table1table2,其结构如下

表1:

 Col11    Col12    Col13
 -------------------------
 200      text     55

表2:

 Col1     Col2
 --------------------
 Col11
 Col12
 Col13

需要以上两个表中的以下结果

 Col1     Col2
 --------------------
 Col11    200
 Col12    text
 Col13    55

是否可以使用临时表来执行此操作?

2 个答案:

答案 0 :(得分:1)

您可以使用UNION ALL执行此操作:

SELECT 'Col1' AS Col1, Col1 AS Col2
FROM mytable

UNION ALL

SELECT 'Col2', Col2
FROM mytable

UNION ALL

SELECT 'Col3', Col3
FROM mytable

Table2似乎在生成所需的结果集方面没有任何作用。所以在上面的查询中省略了它。

答案 1 :(得分:1)

您可以使用交叉申请或UNPIVOT获取

select  
  coll,colvalue
from PivotColToRow
cross apply
(
  select 'col1', col1 union all
  select 'col2', col2 union all
  select 'col3', col3  
) c (Coll, colvalue);

使用UNPIVOT

select col,colvalue
from PivotColToRow
unpivot
(
  colvalue
  for col in (col1, col2, col3)
) unpiv;

试试这个