У меня есть одна большая таблица с транзакциями и меньшая таблица поиска со значениями, которые я хочу добавить на основе 4 общих столбцов.Суть в том, что не каждая комбинация этих 4 столбцов будет существовать в таблице поиска, и есть сценарии, в которых я хочу, чтобы он прекратил проверку и принял совпадение вместо перехода к следующему столбцу.У меня также есть опция «Другое», по умолчанию, если она не соответствует ни одной из опций.
Структуры таблиц выглядят примерно так:
transaction_table
country, trans_id, store_type, store_name, channel, browser, purchase_amount, currency
lookup_table
country, store_name, channel, browser, trans_fee
Данные могут быть примерно такими:this:
transaction_table:
country| trans_id| store_type |store_name |channel |browser |amt |currency
US | 001 | Big Box | Target | B&M |N/A |1.45 |USD
US | 002 | Big Box | Target | Online |Chrome |1.79 |USD
US | 003 | Small | Bob's Store| B&M |N/A |2.50 |USD
US | 004 | Big Box | Walmart | B&M |N/A |1.12 |USD
US | 005 | Big Box | Walmart | Online |Firefox |3.79 |USD
US | 006 | Big Box | Amazon | Online |IE |4.54 |USD
US | 007 | Small | Jim's Plc | B&M |IE |2.49 |USD
lookup_table:
country|store_name |channel |browser |trans_fee
US |Target |B&M |N/A |0.25
US |Target |Online | |0.15
US |Walmart | | |0.30
US |Other | | |0.45
Итак, глядя на данные lookup_table:
- Строка 1 очень специфична и будет соответствовать всем 4 столбцам соединения.
- Ряд 2 не будет заботиться о том, какой браузер использовался для покупок в Target, поэтому независимо от значения «браузер» trans_fee должен возвращаться одинаково (хотя другие магазины могут заботиться об этом).
- Ряд3 говорит, что любая транзакция со страной = 'US' и store_name = 'Walmart', независимо от того, будут ли остальные столбцы объединения иметь одинаковый trans_fee
- Строка 4 - это «другой» сценарий, в котором она должнаСначала посмотрите на столбец store_name и, если он не находит соответствия, перейдите к Other.
Данные lookup_table могут измениться и могут оказаться зависимыми от времени (добавлены столбцы start_date и end_date), поэтомудействительно не был бы хорошим кандидатом для длинного, сложного оператора CASE.
Я думал о комбинации проверки каждого столбца с оператором IF IN, но я надеюсь, что есть более простой оператор условного типа соединенияЯ могу использовать, чтобы перейти столбец за столбцом и иметь другой вариант.
Спасибо!
edit: я не указал это, но я хочу в основном вернуть все данные изaction_table и добавить соответствующий trans_fee в каждую строку.