tags:

views:

61

answers:

2

Hi.

Let's say I've got the following database table

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

Now I want to do a select statement that merges these two columns to one while replacing the null values. The result should look like this:

Joe, Joey, 14

Which sql statement manages this (if it's even possible)?

A: 

AFAIK, the question is not clear.so i am making some assumptions over here. your output has the first and 3rd columns for both the rows as same. Only the 2nd field is different.

so u can simply write a select quest

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;

may be we can tune this but i am not good in tuning sql squeries,but this is the way i suppose u need.

Vijay Sarathi
+1  A: 

Simplest solution:

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>

If you have 11gR2 you could use the new-fangled LISTAGG() function but otherwise it is simple enough to wrap the above statement in a SELECT which concatenates the NAME and NICKNAME columns.

APC