oracle - 按近似值划分
问题描述
我正在尝试将两个财务表与货币近似值匹配并且没有 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
表上的字段来分区。
你们将如何处理这个问题?
解决方案
为什么“表 A”中 Jerry 的“1023”匹配“表 B”中的“1020”而不是“表 B”中的“1024”?
如果原因是“表 B”中的“1024”已经与“表 A”中的“1024”匹配,那么您已经引入了某种形式的迭代过程。每次迭代都需要为“表 A”中的每一行找到“表 B”中的最佳匹配,为“表 B”中的每一行找到“表 A”中的最佳匹配,然后,当你有一个匹配时最适合 A 和 B,将它们分配在一起并将它们排除在流程之外。
继续,直到迭代不再出现任何匹配。