2016-08-26 34 views
0

我有这个SQL服务器:转换多列到一个列

name1 name2 name3 value1 value2 value3 
    A  B  C  1  2  3 

我真的需要这个

Name Value 
    A  1 
    B  2 
    C  3 

请帮助我。

+0

[Unpivot](http://www.databasejournal.com/features/mssql/converting-rows-to-columns-pivot-and-columns-to-rows-unpivot-in-sql-server.html)是哟你的朋友 –

+0

@ AlexB.If unpivot是他在这种情况下的朋友我敦促你展示一个例子,因为现实是数据是双重旋转和unpivoting一次会让你的名字成行,但仍然有3个值列未透露第二次会为您提供名称与价值的各种组合(9)。在这种情况下,UNION全部或插入临时表或表变量将是最直接的,即使我仍然可以考虑使用2级unpivot然后条件聚合来实现它。 – Matt

+0

我曾尝试使用枢轴..指导我类似的情况下,但他们不是我有同样的情况。 – Jhon

回答

1

您可以使用union

select name1 as Name, value1 as Value from mytable 
union 
select name2, value2 from mytable 
union 
select name3, value3 from mytable 
+0

谢谢! scaisEdge ..你救了我的一天.. – Jhon

1

使用下面的查询..万一UNION ALL执行缓慢或只是为了显示一种替代

Select name1 Name,value1 Value from YourTable 
    Union all 
    Select name2 ,value2 from YourTable 
    Union all 
     Select name3 ,value3 from YourTable 
+0

谢谢Unnikrishman R .. – Jhon

0

临时表方法....

DECLARE @Table as TABLE (name1 CHAR(1), name2 CHAR(1), name3 CHAR(1), value1 INT, value2 INT, value3 INT) 
INSERT INTO @Table VALUES ('A','B','C',1,2,3) 

IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL 
    BEGIN 
     DROP TABLE #TempTable 
    END 

SELECT name1 as Name, value1 as Value 
INTO #TempTable 
FROM 
    @Table 

INSERT INTO #TempTable 
SELECT name2, value2 
FROM 
    @Table 

INSERT INTO #TempTable 
SELECT name3, value3 
FROM 
    @Table 

SELECT * 
FROm 
    #TempTable