Объединение двух строк в один при замене нулевых значений

Скажем, у меня есть следующая таблица базы данных

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

Теперь я хочу сделать оператор select, который объединяет эти два столбца в один, заменяя нулевые значения. Результат должен выглядеть следующим образом:

Joe, Joey, 14

Какая инструкция sql управляет этим (если это возможно)?

Ответ 1

Самое простое решение:

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>

Если у вас есть 11gR2, вы можете использовать новомодную функцию LISTAGG(), но в противном случае достаточно просто обернуть вышеупомянутый оператор в SELECT, который объединяет столбцы NAME и NICKNAME.

Ответ 2

AFAIK, вопрос не ясен. Я делаю некоторые предположения здесь. ваш вывод имеет первый и третий столбцы для обеих строк. Только второе поле отличается.

поэтому вы можете просто написать выбранный квест

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;

Возможно, мы можем настроить это, но я не очень хорошо разбираюсь в sql-squeries, но это так, как я полагаю, вам нужно.