對不起,我知道類似的問題已經被問了很多次,但以前最喜歡的我一直沒能找到一個適合我的需要,也不給我足夠的信息,以便能夠列向解決方案擴展。另一個轉行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;
什麼是您的select語句看起來像與人列的第一個結果:在我的博客,我用例子來解釋? – Spidy 2011-04-20 22:28:22
我還沒有 - 只是基於寬表的選擇。我需要去的任何一種後兩種基於行的例子 – Paul 2011-04-20 22:48:39