首页 > 解决方案 > 按近似值划分

问题描述

我正在尝试将两个财务表与货币近似值匹配并且没有 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表上的字段来分区。

你们将如何处理这个问题?

标签: oracleoracle11g

解决方案


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

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

继续,直到迭代不再出现任何匹配。


推荐阅读