SQL使用其他列中的随机值从第一列中选​​择所有不同的行

时间:2016-09-22 12:55:19

标签: sql oracle select distinct

我有这样的事情:

id      email       email2      id_2
------------------------------------------
1       James@      james2@        11          
1       James@      james2@        11          
1       James@         -           11  
1       James@         -           11  
2       Declan@     dylan2@        22          
2       Declan@     dylan2@        44        
3       John@          -           33
3       John@          -           33         
4       Vito@       vito2@         55

所以我需要为不同的id选择所有值,如果email2不为空,我应该选择一个不是空的email2,但如果只有空的email2,请选择一个。例如:

id      email       email2      id_2
------------------------------------------
1       James@      james2@        11               
2       Declan@     dylan2@        22          
3       John@          -           33         
4       Vito@       vito2@         55

没有任何条件,所以我不知道该怎么做。通常我会使用partition或group by ..请帮助我。

2 个答案:

答案 0 :(得分:1)

根据您的示例数据,使用maxmin汇总可以获得您想要的结果:

select id, max(email), max(email2), min(id_2)
from yourtable 
group by id

答案 1 :(得分:0)

一种方法是:

select t.*
from (select t.*,
             row_number() over (partition by id
                                order by (case when email2 is not null then 1 else 2 end)
                               ) as seqnum
      from t
     ) t
where seqnum = 1;

此方法允许您通过两封电子邮件从一行中提取所需的任何列。

注意:这假定-实际上意味着NULL。如果实际值是连字符,则需要修改case