SQL - SQL para obtener dos registros en uno

   
Vista:

SQL para obtener dos registros en uno

Publicado por miguel (3 intervenciones) el 21/11/2011 17:16:56
Hola, necesito

necesito una select que me devuelva en lugar de esta información:

codigo | nombre | colores
100 | pepito | azul
100 | pepito | verde

esta:

codigo | nombre | colores
100 | pepito | azul,verde

es decir, que me una dos registros en uno en el que el único campo que difiere aparezca separado por una coma.


Muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve

SQL para obtener dos registros en uno

Publicado por xve (237 intervenciones) el 22/11/2011 00:04:18
Hola Miguel, no comentas que tipo de base de datos estas utilizando, pero si utilizas MySQL seria algo así:
1
2
3
SELECT codigo, nombre,GROUP_CONCAT(colores SEPARATOR ',') AS NewColores
FROM Tabla
GROUP BY codigo

Espero que te sirva.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

SQL para obtener dos registros en uno

Publicado por Miguel (3 intervenciones) el 22/11/2011 10:41:00
Es Oracle 10 por lo que no me sirve :(

Al final he tomado la decisión de hacer una función. Increíble que en Oracle no exista esa función!

Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

SQL para obtener dos registros en uno

Publicado por xve (237 intervenciones) el 22/11/2011 11:44:19
Hola Miguel, me puedes mostrar la función que has realizado?? por si alguna vez tengo que aplicarlo a Oracle.

Gracias Miguel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

SQL para obtener dos registros en uno

Publicado por Miguel (3 intervenciones) el 22/11/2011 11:49:42
Básicamente:

un FOR cur IN (la query que queramos)

y luego:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
loop
 
   if (i = 1) then
 
       ret:=cur_ordenes.descripcion;
   else
        ret := concat(ret,', ');
        ret := concat(ret,cur_ordenes.descripcion );
 
   end if;
 
    i := i +1;
 
   end loop;


estoy haciendola un par de cambios para que sea más eficiente pero la idea es esa.

saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar