2016-12-15 4 views
2

Мне нужно объединить две таблицы вместе на основе трех столбцов. Иногда проблема заключается в том, что один из ключевых столбцов переводится и сопоставляется по-разному в другой таблице. Я буду пытаться, например мой вопрос с помощью кода:Условное соединение, если существует

select t1.TQ 
    from table1 t1 
    left join table2 t2 on t1.comp_cd = t2.comp_cd and t1.plcy_frm = t2.plcy_frm 
          and t1.val_cd = t2.val_cd 

Столбцы «comp_cd» и «plcy_frm» прекрасно, однако проблема с val_cd. Иногда val_cd в таблице2 неправильно отображается в таблице1 и должен пройти третью таблицу, table3. Структура Таблица3 ниже:

Val_Cd  Mapped_Val_Cd 
A123   A564 

Так что -> Мне нужно, чтобы присоединиться на Mapped_Val_Cd значение, когда оно существует в Table3, но присоединиться на Val_Cd из Table2 когда Val_Cd не существует в Table3.

Надеюсь, это имеет смысл - я пробовал Case, когда существует синтаксис, но не могу заставить его работать.

+0

Выборочные данные и желаемые результаты будут реально помочь уточнить, что вы хотите сделать , –

+0

Я был бы более чем счастлив предоставить образцы данных и желаемые результаты! Вы знаете, как я могу отформатировать таблицы здесь? Я новичок в Stack OverFlow. –

+0

Вы можете форматировать данные так же, как и код. Самый простой способ - предусмотреть каждую строку с четырьмя пробелами. Другой способ - выделить код и нажать значок '{}' чуть выше поля ввода. –

ответ

1

Предполагая, что нет дубликатов в table3, вы можете left join его и затем выберите значение, которое вы хотите в on пункте:

select t1.TQ 
from table1 t1 left join 
    table3 t3 
    on t1.val_cd = t3.val_cd 
    table2 t2 
    on t1.comp_cd = t2.comp_cd and 
     t1.plcy_frm = t2.plcy_frm and 
     t1.val_cd = coalesce(t3.Mapped_Val_Cd, t2.val_cd); 
+0

На самом деле - этот код сделал именно то, что я искал. Большое спасибо за быстрое и точное решение! –

Смежные вопросы