我有一个包含3列的表。
Id email1 email2
01 abc@x.com
01 cdf@y.com
01 pwe@y.com
02 ert@x.com
03 ghu@x.com
03 cdf@y.com
04 oiu@x.com ghy@y.com
我想将具有预期输出/结果的同一个表更新为
Id email1 email2
01 abc@x.com cdf@y.com
01 pwe@y.com
02 ert@x.com
03 cdf@y.com ghu@x.com
04 oiu@x.com
有没有办法创建一个可以选择数据并显示预期输出/结果的视图?
示例:
Id email1 email2
01 abc@x.com
01 cdf@y.com
01 pqr@v.com
01 scf@y.com
01 dfg@r.com
01 fgt@r.com
01 hji@r.com
01 gty@t.com
我的输出应该是
Id email1 email2
01 abc@x.com cdf@y.com
01 pqr@v.com scf@scf.com
01 dfg@r.com
01 fgt@r.com
01 gty@t.com hji@r.com
基本上我的要求是:ID和其中一个eamil得到更新,或者我想把它呈现在存在的条件下:
案例1
Id enmail email2
01 abc@x.com
01 scf@fg.com
或 案例2
Id email1 email2
01 fgt@r.com
01 hji@r.com
as,我预期的o / p应该在下面的任何一个案例中给出
案例1 o / p
Id email1 email2
01 abc@x.com scf@fg.com
案例2 o / p
Id email1 email2
01 hji@r.com fgt@r.com
我希望......现在我的要求很明确。
答案 0 :(得分:1)
您的问题是第二列在连接回第一列时是非唯一的。因此,您需要通过使用分析函数ROW_NUMBER()
select a.id, a.email1, b.email2
from ( select id, email1
, row_number() over (partition by id order by 1) as r
from table1
where email1 is not null
) a
left outer join
( select id, email2
, row_number() over (partition by id order by 1) as r
from table1
where email2 is not null
) b
on a.id = b.id
and a.r = b.r
order by a.id, a.email1, b.email2
这是一种存储和表示数据的略微好奇的方法。拥有一个电子邮件列可能更有意义,您可以插入所有电子邮件。然后您可以选择所有内容。