我有这样的事情:
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 ..请帮助我。
答案 0 :(得分:1)
根据您的示例数据,使用max
或min
汇总可以获得您想要的结果:
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
。