0
在Oracle 12c中的数据库,我有一个表的地址Oracle订单或等级由字符串关键字
架构:行
Integer personId as PK
String source (what the source data from)
String address1
String address2
String post code
etc...
例如:
p1, news paper(Primary), add1, add2, ....
p1, google (Primary), add1, add2, ....
p1, phone (Secondary), add1, add2, ....
p2 new paper (Primary), add1, add2......
p3 phone (Secondary), add1, add2.....
问题: 我需要每个人都有一个独特的地址。虽然大多数人将只有1地址,但存在这样的情况,一个人结了2个或更多的地址
当前的解决方案:
select * from (
select person_id, source,row_number() over(partition by person_id order by source) rn from address
)a
where a.rn = 1
查询以便通过源的字母顺序重复,并删除了其中的一个副本
但是我不能仅仅按照字母顺序排列它,因为任何源包含(主要)优先于任何其他来源,每个人也不能保证只有一个主要地址,它可能有两个辅助地址或2个主地址,但在大多数情况下它会有一个主地址和一个辅助
您需要编写一些业务规则并测试它们的有效性。看起来您没有足够的信息来达成一些明确的业务规则,而无需对外部数据集进行验证。来源:我建立这样做的系统。 – Ben
@ben你位于布里斯托尔吗? –
不,我不是...... – Ben