按近似值划分

时间:2018-07-16 23:36:00

标签: oracle oracle11g

我正在尝试将两个具有货币近似值且没有pk的财务表匹配。

TABLE A
NAME    VALUE
Jerry   1024
Beth    2048
Jerry   1023
Beth    100

TABLE B
NAME     VALUE
Jerry    1024
Jerry    1020
Beth     2045
Beth     50

我正在寻找的结果是这样的:

NAME     TA      TB
Jerry    1024    1024
Jerry    1023    1020
Beth     2048    2045
Beth     null    50
Beth     100     null

我曾经尝试使用row_number()创建一个“伪ID”,但是找不到一种方法来告诉oracle通过近似表上的VALUE字段来进行分区。

你们将如何处理?

1 个答案:

答案 0 :(得分:0)

为什么“表A”中杰里的“ 1023”与“表B”中的“ 1020”匹配而不是“表B”中的“ 1024”?

如果原因是“表B”中的“ 1024”已经与“表A”中的“ 1024”匹配,那么您已经引入了某种形式的迭代过程。每次迭代都需要在“表B”中为“表A”中的每一行找到最佳匹配,在“表A”中为“表B”中的每一行找到最佳匹配,然后,当您有一个匹配项时,最适合A和B的人,将它们一起分配并从流程中删除。

继续直到迭代不再匹配为止。