Pivot на SQL Server 2010 - PullRequest
       8

Pivot на SQL Server 2010

1 голос
/ 25 июня 2010

Я хочу вернуть первых трех питомцев для каждого сотрудника в виде столбцов вместо строк, т.е.

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; 

К сожалению, он возвращает только ноль для каждой строки ... поэтому вывод, который я вижу,

Owner_ID    Pet1  Pet2   Pet3
-------------------------------------
1           null  null  null  
2           null  null  null  
3           null  null  null 

Надеюсь, это общая проблема, и кто-то, должно быть, уже решил ее.

Спасибо

1 Ответ

2 голосов
/ 25 июня 2010

Если я вас правильно понял, вы можете использовать ROW_NUMBER() over (partition by Owner_ID order by ...) в своем запросе, а затем повернуть их.

Пример следующий.

WITH Unpivoted AS
(
SELECT X.*, ROW_NUMBER() over (partition by Owner_ID order by Pet) AS RN
  FROM (VALUES  
(1,        'Cat') , 
(1,        'Dog')  ,
(1,        'Hamster')  ,
(1,        'Rhino'),
(1,        'Zebra'),
(2,        'Cow')  , 
(2,        'Sheep')  ,
(3,        'Dog' ) 
) AS X (Owner_ID, Pet)
)

SELECT Owner_Id, [1] AS Pet1, [2] AS Pet2,[3] AS Pet3 FROM Unpivoted
PIVOT  
(  
Max(Pet)  
FOR RN IN ([1], [2],[3])  
) AS PivotTable; 

Возвращает

Owner_Id    Pet1    Pet2    Pet3
----------- ------- ------- -------
1           Cat     Dog     Hamster
2           Cow     Sheep   NULL
3           Dog     NULL    NULL
...