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会有多个昵称吗?如果会,你希望如何处理它们?回答得很好