2011-04-20 37 views
3

對不起,我知道類似的問題已經被問了很多次,但以前最喜歡的我一直沒能找到一個適合我的需要,也不給我足夠的信息,以便能夠列向解決方案擴展。另一個轉行question- SQL Server 2005的

我懷疑我可以使用T-SQL的PIVOT或UNPIVOT命令,但我無法遵循MSDN的解釋,並且似乎沒有任何「白癡」類型的指南!

到我的問題 - 我需要的寬表由許多列轉換爲報表設置基於行的結果。如果可能的話,不需要聚合,我試圖避免重複的基於UNION的選擇。

表結果集格式化爲這樣的(其實有更多的人列:S):

Person1 | Person2 | Person3 | Person4 | Person5 | Person6 | Person7 | Person8 
----------------------------------------------------------------------------- 
Bob  Sam  Tom  Alex  Paul  Ann  Jill  Jane 

我真正需要的是能夠產生如下:

Person 
-------------------- 
Bob  
Sam  
Tom  
Alex  
Paul  
Ann  
Jill  
Jane 

獎金將能夠創建設定的結果:

Column Person 
-------------------- 
Person1 Bob  
Person2 Sam  
Person3 Tom  
Person4 Alex  
Person5 Paul  
Person6 Ann  
Person7 Jill  
Person8 Jane 

如何才能實現這一目標我們SQL Server 2005中的T-SQL?

感謝您的任何幫助,

保羅。

- 編輯 -

感謝Martin我學到新的東西今天上午,我已經設法搞到我需要什麼。最後我不得不稍微修改的例子來獲得我所需要的,但是那是因爲我原來的例子忽略了一些細節,我沒有意識到很重要!

我的代碼最後一塊看起來像這樣爲別人有這樣的問題:

WITH Query_CTE([Person1 Title],[Person2 Title],[Person3 Title]) 
AS 
--CTE Expression and column list 
(
    SELECT 
      --Converted to create a common data type. 
      CONVERT(NVARCHAR(MAX),Person1Title) AS 'Person1 Title', 
      CONVERT(NVARCHAR(MAX),Person2Title) AS 'Person2 Title', 
      CONVERT(NVARCHAR(MAX),Person3Title) AS 'Person3 Title' 
FROM Table_Name 
WHERE KeyId = 'XXX' 
) 
SELECT * 
FROM Query_CTE 
UNPIVOT 
    (Person FOR [Column] IN 
    ( 
     [Person1 Title], 
     [Person2 Title],   
     [Person3 Title] 
    ) 
)AS unpvt; 
+0

什麼是您的select語句看起來像與人列的第一個結果:在我的博客,我用例子來解釋? – Spidy 2011-04-20 22:28:22

+0

我還沒有 - 只是基於寬表的選擇。我需要去的任何一種後兩種基於行的例子 – Paul 2011-04-20 22:48:39

回答

3
WITH T(Person1,Person2 /* etc....*/) AS 
(
SELECT 'Bob','Sam' /* etc....*/ 
) 
SELECT * 
FROM T 
UNPIVOT 
    (Person FOR [Column] IN 
     (Person1,Person2 /* etc....*/) 
)AS unpvt; 
+0

馬丁您好,感謝這個答案這麼快,但我可以向你解釋了一點給我,讓我能學到的原則落後嗎? 現在英國的午夜在這裏,所以我要睡覺了,但我會在早晨第一時間給它一個旋風,但我很想了解基本知識。 此致敬意, 保羅 – Paul 2011-04-20 22:45:41

+1

對於表'T'中的每一行它將返回2(或8或任何)輸出行。 'Person'和'[Column]'分別是未轉義列的值及其名稱的列別名。沒有其他的事要說真的!如果表'T'有額外的列沒有指定爲unpivot的一部分,這些將出現2次或8次或其他。 – 2011-04-20 22:59:23

+0

非常感謝,經過一番修改之後,我得到了我所需要的東西 - 我也爲這個問題添加了最終解決方案。 – Paul 2011-04-21 09:25:48