在替换空值时将两行合并为一行

12 sql oracle select

假设我有以下数据库表

Name | Nickname | ID
----------------------
Joe    Joey       14
Joe    null       14
Run Code Online (Sandbox Code Playgroud)

现在我想做一个select语句,将这两列合并为一,同时替换空值.结果应如下所示:

Joe, Joey, 14
Run Code Online (Sandbox Code Playgroud)

哪个sql语句管理它(如果它甚至可能)?

APC*_*APC 19

最简单的解决方案

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>
Run Code Online (Sandbox Code Playgroud)

如果你有11gR2你可以使用新的LISTAGG()函数,但是它很简单,可以将上面的语句包装在一个连接NAME和NICKNAME列的SELECT中.

  • 出色的答案 (2认同)

Vij*_*jay 0

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;
Run Code Online (Sandbox Code Playgroud)

也许我们可以调整这个,但我不擅长调整 sql 查询,但这是我认为你需要的方式。