miércoles, 13 de febrero de 2013

ORACLE SQL - Renglones en una sola columna

Supongamos que tenemos esta tabla:

create table test2(nombre varchar(7));

Y con estos datos:

insert into test2 values('uno');
insert into test2 values('dos');
insert into test2 values('tres');
insert into test2 values('cuatro');
insert into test2 values('cinco');
insert into test2 values('seis');
insert into test2 values('siete');
insert into test2 values('ocho');
insert into test2 values('nueve');
insert into test2 values('diez');
commit;

Si revisamos los datos vemos:

select * from test2
NOMBRE
-------
uno
dos
tres
cuatro
cinco
seis
siete
ocho
nueve
diez
10 rows selected
Y ahora queremos obtener esos 10 renglones en uno solo y en una sola columna

WITH DATOS
AS (SELECT 1 DUMMY, NOMBRE FROM TEST2 )
SELECT  LTRIM(MAX( SYS_CONNECT_BY_PATH ( NOMBRE, ',')),',') NOMBRES
    FROM
    (SELECT  DUMMY, NOMBRE,
             ROW_NUMBER() OVER ( PARTITION BY DUMMY  ORDER BY DUMMY) RN
    FROM  DATOS )
    CONNECT  BY  DUMMY = PRIOR DUMMY
            AND  RN     = PRIOR RN+1
    START WITH RN = 1
   GROUP BY DUMMY;

Y obtenemos:

NOMBRES
-----------------------------------------------------------------------------
uno,dos,tres,cuatro,cinco,seis,siete,ocho,nueve,diez
Espero les sea de utilidad.

1 comentario:

Translate