2015-05-10 65 views
2

我有一个表有三列: - 名称,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 

细节和另一个表details2这样的:

Company Employees City 
    Apple  450   Boston 
+1

不是很清楚,什么是例如使用字段'name'的? –

+0

嗨,我已编辑我的问题。谢谢。 – rozatrra

+1

您是否需要一个表格作为输出或每个不同名称列的单独表格?如果是的话,那么为什么你需要单独的专用于NAME专栏的表格......你一次又一次地改变你的问题......每一个具体的条件......它更好地把所有你的需求一次性提出来,以便其他人可以有清楚的想法你需要什么 – HaveNoDisplayName

回答

2

你可以把你一列值作为表格列和第二列值作为行像这样

第一种方法: - 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 
+0

thx,它的工作原理,但是,如果我有col1上的n行和不同的名称值。我想把它放在一个sp中。 – rozatrra

+0

请参阅编辑回答,第二种方法 – HaveNoDisplayName

+0

我收到此错误:在PIVOT运算符中指定的列名“value(col1)”与PIVOT参数中的现有列名冲突。 – rozatrra