【发布时间】:2010-06-24 22:46:50
【问题描述】:
我想将每个员工的前三只宠物作为列而不是行返回,即
Owner_ID Pet
--------------------
1 Cat
1 Dog
1 Hamster
2 Cow
2 Sheep
3 Dog
转换成
Owner_ID Pet1 Pet2 Pet3
-------------------------------------
1 Cat Dog Hamster
2 Cow Sheep null
3 Dog null null
宠物的名称来自查找表,可以有任意数量的宠物,但我只想返回前 3 个。
这是我的查询:
SELECT Owner,Pet1, Pet2,Pet3
FROM
(select distinct OwnerID as Owner,glcom.Value as Pets
from Owner ,OwnerPets ,Pet
where Pet.Type='Furry'
and OwnerPets.OwnerID = OwnerID.OwnerID
and OwnerPets.PetID = Pet.PetID ) AS SourceTable
PIVOT
(
Max(Pets)
FOR Pets IN (Pet1, Pet2,Pet3)
) AS PivotTable;
不幸的是,它只为每一行返回 null ......所以我看到的输出是
Owner_ID Pet1 Pet2 Pet3
-------------------------------------
1 null null null
2 null null null
3 null null null
希望这是一个常见问题,并且一定有人已经解决了。
谢谢
【问题讨论】:
-
WTF 是 SQL Server 2010?最新版本是 2008 R2。
-
注意:我的回答假设您正在关注 Brent Ozar 调用 2008 R2 SQL Server 2010! brentozar.com/archive/2009/02/sql-server-2010-features-leaked
标签: sql-server sql-server-2008 pivot