Sql 消除重复值并将其替换为空值oracle?

Sql 消除重复值并将其替换为空值oracle?,sql,oracle,Sql,Oracle,我有一张像这样的桌子 source dest1 dest2 -------------------- su1 du1 st1 su1 du1 st2 su1 du1 st3 su2 du1 st1 su2 du2 st4 su2 du2 st1 但是我想要的桌子是 source dest1 dest2 -------------------- su1 du1 st1 su1 du1

我有一张像这样的桌子

source  dest1  dest2
--------------------
su1     du1    st1
su1     du1    st2
su1     du1    st3
su2     du1    st1
su2     du2    st4
su2     du2    st1
但是我想要的桌子是

source  dest1  dest2
--------------------
su1     du1    st1
su1     du1    st2
su1     du1    st3
su2    (null) (null)
su2     du2    st4
su2     du2   (null)

这里的规则是,如果dest2出现一次,则将其替换为null;如果dest1出现一次,则将dest1、dest2替换为null…

在dest2出现一次后,您似乎将其替换为null,当两者都出现时,则将其替换为null。假设
source
提供了订购,您可以执行以下操作:

select source,
       (case when row_number() over (partition by dest1, dest2 order by source) = 1
             then dest1
        end) as dest1,
       (case when row_number() over (partition by dest2 order by source) = 1
             then dest2
        end) as dest2
from t;

您正在使用的规则不清楚。您能解释一下最后一行的
null
吗?为什么第六行的
dest2
null
,但第二行或第三行的
null
?对于源su1-->dest1 du1确实存在,因此我需要将Su2的dest1的值替换为null,因为dest1 du2的dest1 st1值为null已存在将dest2的值替换为null