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