sql:如何保留其中一个具有特定条件的重复数据?

时间:2017-08-21 11:27:36

标签: sql

有一张桌子和一些记录:

userno  | username
-------------------
1       |                         --this username is null value
1       | a
2       | b
2       |                         --this username is null value
3       | c
4       |                         --this username is null value

我想 SELECT 这个表,我希望结果是:

userno  | username
-------------------
1       | a
2       | b                 
3       | c
4       |  

userno重复时,保留一个username的数据不为空;

userno不重复时,保留它。

=========================

=========================

UPDATE1:

有一张桌子和一些记录:

No  | field1  | flag
----------------------------
1   |         | 1             
1   | a       | 2
1   | b       | 3
1   | c       | 4
2   | c       | 1
2   | e       | 2
2   | f       | 5              
3   | c       | 0
4   |         |                

我想 SELECT 这个表,我希望结果是:

No  | field1  | flag
-------------------
1   | a       | 2
2   | e       | 2                
3   | c       | 0
4   |         | 

No重复时,请使用flag=2保留一个数据;

No不重复时,请重新设置它。

1 个答案:

答案 0 :(得分:6)

这是对问题的原始版本的回答。

您可以使用聚合:

select userno, max(username) as username
from t
group by userno;

编辑:

如果您对给定的username有多个userno,并且您想要所有这些{/ p>

select userno, username
from t
where username is not null
union all
select userno, max(username)
from t
group by userno
having max(username) is null;