I am trying to rebuild some MS Access update query logic with R's merge function, as the update query logic is missing a few arguments.
Table link Google drive In my database "Invoice Account allocation", there are 2 tables:
Account_Mapping Table:
Origin  Origin Postal Destination   Destination      Invoice
country code          country       postal code      Account
FRA       01           GBR            *               ZR001
FRA       02           BEL            *               ZR003
BEL       50           ARG            *               ZR002
GER       01           ITA            *               ZR002
POL       02           ESP            *               ZR001
ESP       50           NED            *               ZR003
*         95           FRA           38               ZR001
BEL        *            *             *               ZR002
*          *            *             *               ZR003
FRA        *          FRA            25               ZR004
Load_ID
 ID            Origin   Postal  Destination  Destination    Default 
               country   code                postal code    Invoice Account
2019SN0201948   FRA       98    FRA             38           XXAC001
2019SN0201958   POL       56    GBR             15           XXAC001
2019SN0201974   BEL       50    ARG             27           XXAC001
2019SN0201986   FRA       02    GER             01           XXAC001
The default invoice account in tables (Load_ID and Status_ID) is updated by the invoice account from the Account_Mapping table.
The tables Account_Mapping and Load_ID can be joined by: Origin country & Origin country, Origin Postal code & Postal code, Destination country & Destination, and Destination postal code & Destination postal code.
In the account_mapping table, there are several "*", it means the string value can take any value. I am not able build this logic with merge function. Please help me with a better logic.
New_Assigned_Account_Final <- merge(Load_ID, Account_Mapping, by.x = 
c("Origin country","Postal code","Destination", "Destination postal code"), 
by.y = 
c("Origin country","Origin Postal code","Destination country", "Destination 
postal code"))
Desired result:
Updated Load_ID table as below.
Load_ID:
    ID        Origin    Postal  Destination  Destination    Default 
               country   code                postal code    Invoice Account
2019SN0201948   FRA       98    FRA             38             ZR003
2019SN0201958   POL       56    GBR             15             ZR003
2019SN0201974   BEL       50    ARG             27             ZR002
2019SN0201986   FRA       02    GER             01             ZR003
For the first ID, the default ID becomes "ZR003" because, "FRA" as Origin country doesn't have a Postal code - "98", so it falls under the all "*" bucket and is allocated to ZR003.
For the third ID, the default ID becomes "ZR002" because, "BEL" as Origin country has a Postal code - "50" associated with it, and the destination postal code of "ARG" can be anything because of the "*" in the Destination postal code column, therefore it is allocated to ZR002.
Thank you for your inputs.
