2013-09-26 38 views
9

mam coś takiego:Teradata sql obrotowe wiele wystąpień na dodatkowe kolumny

ID  Result 
1  value1 
2  value1 
2  value2 
3  value1 
4  value1 
4  value2 
4  value3 

I chciałbym, aby powrócić coś takiego:

ID  Result1  Result2  Result3 
1  value1 
2  value1  value2 
3  value1 
4  value1  value2  value3 

Rozglądałem na czopami i concats i łamie się i po prostu nie mogę znaleźć prostego, rozsądnego rozwiązania.

TIA

+0

Czy będziesz mieć ograniczoną liczbę wyników dla każdego identyfikatora? – Taryn

+0

Nie jestem pewien, o co pytasz. Każdy identyfikator może lub nie może mieć dodatkowe wyniki, ale nie więcej niż około 10. – user2820576

Odpowiedz

15

Niestety Teradata nie posiada funkcję PIVOT ale można użyć funkcji zagregowanego z wyrażeniem CASE, aby uzyskać wynik.

select id, 
    max(case when seq =1 then result end) result1, 
    max(case when seq =2 then result end) result2, 
    max(case when seq =3 then result end) result3 
from 
(
    select id, res, row_number() over(partition by id order by result) seq 
    from yourtable 
) d 
group by id 
order by id; 

Jeśli masz więcej wartości dla każdego identyfikatora, możesz dodać więcej wyrażeń CASE.

+0

Dziękuję, bluefeet. Udało mi się to dla mnie zrobić. – user2820576

+0

bluefeet, a jeśli niektóre z ponumerowanych wierszy mają tę samą wartość? Czy istnieje sposób w tej metodzie, aby je zignorować, jeśli są one zduplikowanymi wartościami? – user2820576

+0

@ user2820576 Proponuję, abyś zadał nowe pytanie z nowymi szczegółami i wymaganiami – Taryn