对不起,我知道类似的问题已经被问了很多次,但以前最喜欢的我一直没能找到一个适合我的需要,也不给我足够的信息,以便能够列向解决方案扩展。另一个转行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