2010-07-16 15 views
9

Digamos que tengo la siguiente tabla de base de datosLa fusión de dos filas a uno, mientras que la sustitución de los valores nulos

Name | Nickname | ID 
---------------------- 
Joe Joey  14 
Joe null  14 

Ahora quiero hacer una declaración de selección que combina estas dos columnas a uno, mientras que la sustitución de los valores nulos. El resultado debería verse así:

Joe, Joey, 14 

¿Qué instrucción sql maneja esto (si es posible)?

+1

caso de que la realidad sea "Joes" o "Joe"? – ninesided

+0

Lo siento, mi culpa. Fijo. –

+0

¿En qué columna fusionas filas? por ejemplo, si tendrá la tercera fila XXX, nulo, 10. ¿Qué debe devolver su consulta? –

Respuesta

0

yo sepa, la pregunta no se clear.so estoy haciendo algunas suposiciones aquí. su salida tiene los primeros y 3 columnas, tanto para las filas como iguales. Solo el segundo campo es diferente.

por lo que u puede simplemente escribir un selecto búsqueda

select one.name,two.nick_name,one.id from 
(select name,id from your_tb group by name,id) one, 
your_tb two 
where two.nickname is not NULL 
and two.name=one.name 
and two.id=one.id; 

puede ser que podemos sintonizar esto, pero yo no soy bueno en squeries ajuste SQL, pero esta es la forma en que supongo u necesidad.

11

solución más simple:

SQL> select * from t69 
    2/

NAME  NICKNAME   ID 
---------- ---------- ---------- 
Joe  Joey    14 
Joe       14 
Michael      15 
      Mick    15 
      Mickey    15 

SQL> select max(name) as name 
    2   , max(nickname) as nickname 
    3   , id 
    4 from t69 
    5 group by id 
    6/

NAME  NICKNAME   ID 
---------- ---------- ---------- 
Joe  Joey    14 
Michael Mickey    15 

SQL> 

Si tiene 11gR2 se podría utilizar the new-fangled LISTAGG() function pero por lo demás es lo suficientemente simple como para envolver la declaración anterior en un SELECT, que concatena las columnas NOMBRE y el apodo.

+1

respuesta brillante – Mukus

Cuestiones relacionadas