2014-01-22 47 views
1

我有一個如下所示的表。我的問題是:如何將列轉換爲行?我使用Microsoft SQL Server將列轉換爲行的SQL查詢

sip_RECno user1  user2 user3  user4  

    1   ram  ravi  sam  raj 

我需要運像下面

user 
ram 
ravi 
sam 
raj 

怎麼辦呢?感謝

+0

的[高效行轉換爲列在SQL Server 2008]可能重複(http://stackoverflow.com/questions/15745042/efficiently-convert-rows-to-columns-in -sql-server-2008) – Betlista

+2

「將列轉換爲行」是「將行轉換爲列」的可能性很少。 –

+0

真的嗎? PIVOT與UNPIVOT - http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx – Betlista

回答

7

您的數據

DECLARE @TABLE TABLE 
(sip_RECno INT,user1 VARCHAR(10),user2 VARCHAR(10) 
,user3 VARCHAR(10),user4 VARCHAR(10))  

INSERT INTO @TABLE VALUES 
(1,'ram','ravi','sam','raj') 

查詢

;WITH CTE 
AS 
    (
    SELECT * FROM (
    SELECT user1 ,user2 ,user3 , user4 FROM @TABLE) T 
    UNPIVOT (Value FOR N IN (user1 ,user2 ,user3 , user4))P 
) 
SELECT Value AS Users 
FROM CTE 

結果集

╔═══════╗ 
║ Users ║ 
╠═══════╣ 
║ ram ║ 
║ ravi ║ 
║ sam ║ 
║ raj ║ 
╚═══════╝ 
+0

如何爲動態列做些什麼? – Happy

+0

@快樂這將是另一個長長的答案來解釋這裏看看這裏滾動到這個頁面的中間,看看動態樞軸/ unpivot數據如何http://www.codeproject.com/Tips/516896/Calculate-aggregates- for-dynamic-columns-using-UNP –

5

您只需UNPIVOT()

select [user] from table_name unpivot 
     (
     [user] 
     for [userid] in ([user1], [user2], [user3], [user4]) 
    )unpvt 

Demo

+0

如何爲動態列做些什麼? – Happy

+0

通過使用動態SQL和'FOR XML PATH' –

+1

http://sqlfiddle.com/#!3/ad421/3這是它如何與動態列表 –