2009-03-27 11 views
1

Comme le titre l'indique, j'ai besoin d'une méthode pour aplatir plusieurs lignes en une seule sortie par compte. Par exemple la table ressemble à ceci:Créer un fichier plat qui «aplatit» plusieurs lignes rtansaction en une seule ligne dans SQL * PLus

compte Transaction

12345678 ABC

12345678 DEF

12346578 GHI

67891011 ABC

67891011 JKL

J'ai besoin sortie à être:

12345678 | ABC | DEF | GHI

67891011 | ABC | JKL

Le montant des transactions est inconnue. Pour certains comptes, cela peut être 1 ou 2, jusqu'à 100.

Répondre

1

Vous pouvez le faire en utilisant une version personnalisée de Tom Kyte's STRAGG function, comme ceci:

select account||'|'||stragg(transaction) 
from mytable 
where ... 
group by account; 

La fonction donnée utilise des virgules pour séparer les valeurs, mais vous pouvez facilement changer à utiliser « | ».

Un exemple en utilisant EMP (et avec des virgules encore):

SQL> select deptno || '|' || stragg(ename) names 
    2 from emp 
    3 group by deptno; 

NAMES 
-------------------------------------------------------------------------------- 
10|CLARK,KING,FARMER,MILLER 
20|JONES,FORD,SCOTT 
30|ALLEN,TURNER,WARD,MARTIN,BLAKE 
+0

nice! Je n'avais aucune idée de quelque chose comme ça existait! nous avions écrit beaucoup de code pour y parvenir! – Preets

+0

Oui, c'est une fonction très pratique à avoir autour. –

Questions connexes