转置数据以创建表

时间:2015-05-10 21:21:30

标签: sql sql-server sql-server-2012

我有一个包含三列的表: - name,col1,col2

我需要创建另一个表,其中col1作为列,col2作为值。有人可以给我一个想法。

这是来源:

Name      col1         col2
details   Company      Microsoft
details   Employees    300
details   City         New York
details2  Company      Apple
details2  Employees    450
details2  City         Boston

我需要一张表来获取这样的详细信息

Company    Employees    City
Microsoft  300          NewYork

另一个详细信息表2就像这样:

  Company    Employees    City
    Apple      450          Boston

1 个答案:

答案 0 :(得分:2)

您可以将One Column值转换为Table Column,将Second列值转换为Rows,就像这样

第一种方法: - SAMPLE SQL FIDDLE

Select    
 MAX(case when col1 = 'Company' then col2 end) Company,   
 MAX(case when col1 = 'Employee' then col2 end) Employee,   
 MAX(case when col1 = 'City' then col2 end) City 
From test 
Group By name

修改

第二种方法: - SQL FIDDLE

DECLARE @QUERY NVARCHAR(MAX), @Soucecolumn VARCHAR(MAX)
SET @Soucecolumn = STUFF((SELECT distinct ',[' + [col1 ] + ']' FROM test FOR XML PATH('')),1,1,'')
SET @QUERY = 'SELECT ' + @Soucecolumn + ' FROM test PIVOT (MAX(col2) FOR [col1 ] IN (' + @Soucecolumn + ')) AS pvt'
exec sp_executesql  @QUERY