在SQL Server 2012中将行转置为列

时间:2016-12-09 17:16:46

标签: sql tsql sql-server-2012

我在单个列中有数据要转置到SQL Server 2012中的单个行。这些数据来自多个表。

请使用帮助使用支点功能。

我的数据如下:

p1
x1 
y1 
z1 

我想将其更改为

p1 x1 y1 z1  

2 个答案:

答案 0 :(得分:2)

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(SomeColumn) From YourTable Order by 1 For XML Path('')),1,1,'') 
Select  @SQL = '
 Select ' + @SQL + '
  From  (Select SomeColumn from YourTable ) A
  Pivot (max(SomeColumn) For [SomeColumn] in (' + @SQL + ') ) p'
Exec(@SQL);

返回

p1  x1  y1  z1
p1  x1  y1  z1

你想要Col1,Col2,...... ColN

答案 1 :(得分:0)

要在不使用T-SQL数据透视功能的情况下进行转动,您可以这样做:

-- Sample data
DECLARE @yourtable TABLE (col1 char(2), col2 int);
INSERT @yourtable (col1, col2) VALUES ('p1',20),('x1',30),('y1',15),('z1',3),('z1',5);

-- Pivoting without using Pivot
SELECT 
  p1   = MAX(CASE col1 WHEN 'p1' THEN col2 ELSE 0 END),
  x1   = MAX(CASE col1 WHEN 'x1' THEN col2 ELSE 0 END),
  y1   = MAX(CASE col1 WHEN 'y1' THEN col2 ELSE 0 END),
  z1   = MAX(CASE col1 WHEN 'z1' THEN col2 ELSE 0 END)
FROM @yourtable;

结果:

p1          x1          y1          z1
----------- ----------- ----------- -----------
20          30          15          5