代码之家  ›  专栏  ›  技术社区  ›  filippo

按近似值划分

  •  0
  • filippo  · 技术社区  · 8 年前

    我正在尝试将两个财务表与货币近似值进行匹配,但没有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 回复  |  直到 8 年前
        1
  •  0
  •   Gary Myers    8 年前

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

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

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

    推荐文章