Подходим четыре столбца как условие для завершения левого внешнего соединения - PullRequest
0 голосов
/ 26 февраля 2019

Мне нужно объединить две таблицы со всеми столбцами в первой таблице (левое внешнее соединение) и только один столбец во второй, если значения в четырех столбцах совпадают.

Другими словами, если четыре столбца совпадают, тогда updatenotice должно равняться значению во второй таблице (таблица b). Если один из столбцов не совпадает, не присоединяйте значение второй таблицы.но оставьте updatenotice как в первой таблице (таблица a).

Я получаю синтаксическую ошибку в операторе case.

Вот мой код:

proc sql;
create table UseLimit_updates as
select *
from work.updated_mwh as a
left outer join work.archive_dups as b
   on a.updatenotice=b.updatenotice
   case when a.res_id=b.res_id
     and a.limit_start_date=b.limit_start_date
     and a.limit_end_date=b.limit_end_date
     and a.created_date=b.created_date
     then a.updatenotice=b.updatenotice
 else a.updatenotice='A'
end;
quit;

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Я думаю, coalesce() более кратко:

proc sql;
create table UseLimit_updates as
    select . . .,
           coalesce(b.updatenotice, a.updatenotice, 'A') as updatenotice
    from work.updated_mwh a left join
         work.archive_dups b
         on a.updatenotice = b.updatenotice and
            a.limit_start_date = b.limit_start_date and
            a.limit_end_date = b.limit_end_date and
            a.created_date = b.created_date;
    end;

quit;

Ваш код также предполагает, что вы хотите 'A' в качестве значения по умолчанию, если оба других значения отсутствуют.

0 голосов
/ 26 февраля 2019

Оператор case должен быть включен в часть выбора:

select 
  case when b.updatenotice is null then a.updatenotice else b.updatenotice end,
  <rest of the columns of work.updated_mwh>
from work.updated_mwh as a
left join work.archive_dups as b
on 
  a.res_id=b.res_id and 
  a.limit_start_date=b.limit_start_date and 
  a.limit_end_date=b.limit_end_date and 
  a.created_date=b.created_date
end;
...