2013-09-26 7 views
9

ho qualcosa di simile:Teradata SQL perno più occorrenze in colonne aggiuntive

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

e mi piacerebbe tornare qualcosa di simile:

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

Ho cercato su perni e concats e si rompe e io non riesco a trovare una soluzione semplice e ragionevole.

TIA

+0

Hai intenzione di avere un numero limitato di risultati per ogni ID? – Taryn

+0

Non sono sicuro di cosa stai chiedendo. Ogni ID può o non può avere risultati aggiuntivi, ma non più di circa 10. – user2820576

risposta

15

Purtroppo Teradata non ha una funzione pivot ma è possibile utilizzare una funzione di aggregazione con un'espressione CASE per ottenere il risultato.

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; 

Se si dispone di più valori per ciascun ID, è possibile aggiungere più espressioni CASE.

+0

Grazie, bluefeet. Sono riuscito a farlo funzionare per me. – user2820576

+0

bluefeet, cosa succede se alcune delle righe numerate hanno lo stesso valore? C'è un modo in questo metodo per ignorarli se sono valori duplicati? – user2820576

+0

@ user2820576 Ti suggerisco di fare una nuova domanda con i nuovi dettagli e requisiti – Taryn