2009-09-18 8 views
3

J'ai quelques-unes des données normalisées qui ressemblent à ceci.Oracle: champs normalisés en chaîne CSV

a | x 
a | y 
a | z 
b | i 
b | j 
b | k 

Quelle requête retournera les données de telle sorte que le côté «plusieurs» est représenté comme une chaîne CSV?

a | x,y,z 
b | i,j,k 

Répondre

4

Mark,

Si vous êtes sur la version 11gR2, et qui n'est pas :-), vous pouvez utiliser listagg

SQL> create table t (col1,col2) 
    2 as 
    3 select 'a', 'x' from dual union all 
    4 select 'a', 'y' from dual union all 
    5 select 'a', 'z' from dual union all 
    6 select 'b', 'i' from dual union all 
    7 select 'b', 'j' from dual union all 
    8 select 'b', 'k' from dual 
    9/

Tabel is aangemaakt. 

SQL> select col1 
    2  , listagg(col2,',') within group (order by col2) col2s 
    3 from t 
    4 group by col1 
    5/

COL1 COL2S 
----- ---------- 
a  x,y,z 
b  i,j,k 

2 rijen zijn geselecteerd. 

Si votre version n'est pas 11gR2, mais plus que 10gR1, alors je recommande d'utiliser la clause modèle pour cela, comme écrit ici: http://rwijk.blogspot.com/2008/05/string-aggregation-with-model-clause.html

Si inférieur à 10, alors vous pouvez voir plusieurs techniques dans le lien de rexem à la page oracle-base, ou dans le l encre au fil OTN dans le blogpost mentionné ci-dessus.

Cordialement, Rob.

Questions connexes