在Oracle SQL

时间:2015-12-02 11:39:25

标签: sql oracle oracle11g

我有像这样存储的机构记录数据:

Agreement ID   Broker ID      Broker_Eff_Dt    Broker_Term_Dt Broker_Type 
A001              Broker1      01-JUN-2015      13-JUN-2015    B 
A001              Broker2      14-JUN-2015      21-AUG-2015    B
A001              Broker2      22-AUG-2015      30-SEP-2015    B 
A001              AGENCY1      01-JUN-2015      31-DEC-9999    A

代理商(Broker_Type = A)通过协议ID与其经纪人(Broker_Type = B)相关联。在这种情况下,代理商终止日期是开放式的(这表明它是活跃的),而其所有经纪人都已被终止。

代理商在协议中最多只能拥有一个经纪人。

要求是拆分对应于其每个经纪商范围的代理商范围:

Agreement ID   Broker ID      Broker_Eff_Dt    Broker_Term_Dt Broker_Type 
A001              Broker1      01-JUN-2015      13-JUN-2015    B
A001              Broker2      14-JUN-2015      21-AUG-2015    B
A001              Broker2      22-AUG-2015      30-SEP-2015    B
A001              AGENCY1      01-JUN-2015      13-JUN-2015    A
A001              AGENCY1      14-JUN-2015      21-AUG-2015    A
A001              AGENCY1      22-AUG-2015      30-SEP-2015    A
A001              AGENCY1      01-OCT-2015      31-DEC-9999    A 

请注意,代理商获得的跨度没有相应的代理商跨度。

代理商的跨度并不总是超过其经纪人的范围。如果它们一致,则代理商数量的跨度应与经纪人的数量相同。 例如:

Agreement ID   Broker ID      Broker_Eff_Dt    Broker_Term_Dt Broker_Type 
A001              AGENCY1      01-JUN-2015      13-JUN-2015    B
A001              AGENCY2      14-JUN-2015      21-AUG-2015    B
A001              AGENCY3      22-AUG-2015      30-SEP-2015    B
A001              Broker1      01-JUN-2015      30-SEP-2015    A
运行后

Agreement ID   Broker ID      Broker_Eff_Dt    Broker_Term_Dt Broker_Type 
A001              Broker1      01-JUN-2015      13-JUN-2015    B
A001              Broker2      14-JUN-2015      21-AUG-2015    B
A001              Broker2      22-AUG-2015      30-SEP-2015    B
A001              AGENCY1      01-JUN-2015      13-JUN-2015    A
A001              AGENCY1      14-JUN-2015      21-AUG-2015    A
A001              AGENCY1      22-AUG-2015      30-SEP-2015    A

如果最后一个经纪商的跨度大于其代理商那么类似的事情应该发生在Broker跨度上。例如:

Agreement ID   Broker ID      Broker_Eff_Dt    Broker_Term_Dt Broker_Type 
A001              AGENCY1      01-JUN-2015      13-JUN-2015    B
A001              AGENCY2      14-JUN-2015      21-AUG-2015    B
A001              AGENCY3      22-AUG-2015      30-SEP-2015    B
A001              Broker1      01-JUN-2015      31-DEC-9999    A 

在这种情况下,经纪人的任期应与其代理商相对应。

数据库是Oracle 11g。

我们可以在SQL中实现它(不使用任何游标),例如使用CONNECT BY?

由于

0 个答案:

没有答案