Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как сделать ветвление в Merge? / 9 сообщений из 9, страница 1 из 1
07.08.2019, 17:04
    #39846519
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ветвление в Merge?
Был такой код
Код: sql
1.
2.
3.
4.
5.
6.
7.
   MERGE
  INTO asna_ost Ao
   USING Fict_Ost Od
   ON ((AO.kod1c = Od.kod1c) and (AO.idtovar = OD.idtovar) and (AO.idproizv = OD.idproizv) and (AO.idserii = OD.idserii))
   WHEN MATCHED THEN
     UPDATE SET
      AO.hide = 1;



Но нужно добавить условие, чтобы получилось вот так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  MERGE
  INTO asna_ost Ao
   USING Fict_Ost Od
   ON ((AO.kod1c = Od.kod1c) and (AO.idtovar = OD.idtovar) and (AO.idproizv = OD.idproizv) and (AO.idserii = OD.idserii))
   WHEN MATCHED THEN
   UPDATE SET
     if (AO.ostatok = Od.ost) then
         AO.hide = 1
       else
         begin
           AO.ostatok = AO.ostatok - Od.ost;
           AO.hide = 0;
         end



Естественно выдается ошибка парсинга. Подскажите как правильно оформить это условие?
...
Рейтинг: 0 / 0
07.08.2019, 17:10
    #39846524
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ветвление в Merge?
IF в SQL-запросах не канает.
ибо не из той парафии.
попробуй CASE
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.08.2019, 17:19
    #39846527
court
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ветвление в Merge?
арт2010,

если 3-ка, то вроде как можно несколько секций WHEN MATCHED THEN с доп.условиями делать

Код: sql
1.
2.
3.
4.
WHEN MATCHED and AO.ostatok = Od.ost THEN
...
WHEN MATCHED and AO.ostatok <> Od.ost THEN
...
...
Рейтинг: 0 / 0
07.08.2019, 17:56
    #39846550
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ветвление в Merge?
арт2010,

попробуй так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
MERGE
INTO asna_ost Ao
USING Fict_Ost Od
ON ((AO.kod1c = Od.kod1c) and (AO.idtovar = OD.idtovar) and (AO.idproizv = OD.idproizv) and (AO.idserii = OD.idserii))
WHEN MATCHED AND (AO.ostatok = Od.ost) THEN
   AO.hide = 1
WHEN MATCHED THEN
   AO.ostatok = AO.ostatok - Od.ost,
   AO.hide = 0
...
Рейтинг: 0 / 0
07.08.2019, 17:58
    #39846551
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ветвление в Merge?
KreatorXXI,

update set забыл.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
MERGE
INTO asna_ost Ao
USING Fict_Ost Od
ON ((AO.kod1c = Od.kod1c) and (AO.idtovar = OD.idtovar) and (AO.idproizv = OD.idproizv) and (AO.idserii = OD.idserii))
WHEN MATCHED AND (AO.ostatok = Od.ost) THEN
UPDATE SET
   AO.hide = 1
WHEN MATCHED THEN
UPDATE SET
   AO.ostatok = AO.ostatok - Od.ost,
   AO.hide = 0
...
Рейтинг: 0 / 0
08.08.2019, 09:46
    #39846784
арт2010
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ветвление в Merge?
Всем спасибо за ответы, версия 2.5, поэтому с несколькими when не получилось, сделал через case
...
Рейтинг: 0 / 0
08.08.2019, 10:17
    #39846803
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ветвление в Merge?
арт2010,

А IIF() в ней есть?
...
Рейтинг: 0 / 0
08.08.2019, 10:21
    #39846804
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ветвление в Merge?
Vlad F,

да. Эта штука доступна начиная с 2.1
...
Рейтинг: 0 / 0
08.08.2019, 11:30
    #39846856
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать ветвление в Merge?
Симонов Денис,

Значит автору можно иметь и ее ввиду в данном контексте, как альтернативу CASE.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как сделать ветвление в Merge? / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]