2016-08-26 33 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