Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将两行合并为一行,同时替换空值_Sql_Oracle_Select - Fatal编程技术网

Sql 将两行合并为一行,同时替换空值

Sql 将两行合并为一行,同时替换空值,sql,oracle,select,Sql,Oracle,Select,假设我有下面的数据库表 Name | Nickname | ID ---------------------- Joe Joey 14 Joe null 14 现在我想做一个select语句,在替换空值时将这两列合并为一列。结果应该如下所示: Joe, Joey, 14 哪个sql语句管理这个(如果可能的话)?AFAIK, 问题不清楚,所以我在这里做一些假设。 输出的第一列和第三列的行数相同。 只有第二个字段不同 所以你可以简单地编写一个精选任务 sele

假设我有下面的数据库表

Name | Nickname | ID
----------------------
Joe    Joey       14
Joe    null       14
现在我想做一个select语句,在替换空值时将这两列合并为一列。结果应该如下所示:

Joe, Joey, 14
哪个sql语句管理这个(如果可能的话)?

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查询,但我认为这是您需要的方式。

最简单的解决方案:

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,那么您可以使用它,但如果没有11gR2,那么将上述语句包装在一个SELECT中就足够简单了,该SELECT将连接名称和昵称列

结果真的应该是“Joes”还是“Joe”?通过哪个列合并行?例如,如果您将有第三行XXX,null,10。您的查询应该返回什么?它可能返回错误。我希望只找到两行。我认为您可以使用下一个条件“昵称不为null”编写查询,它将返回您想要的结果。它只选择昵称为空的行。@Bernhard,Joe会有多个昵称吗?如果会,你希望如何处理它们?回答得很好