powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Как сделать ветвление в Merge?
9 сообщений из 9, страница 1 из 1
Как сделать ветвление в Merge?
    #39846519
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Был такой код
Код: 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
Как сделать ветвление в Merge?
    #39846524
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IF в SQL-запросах не канает.
ибо не из той парафии.
попробуй CASE
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как сделать ветвление в Merge?
    #39846527
Фотография court
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт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
Как сделать ветвление в Merge?
    #39846550
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт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
Как сделать ветвление в Merge?
    #39846551
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как сделать ветвление в Merge?
    #39846784
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы, версия 2.5, поэтому с несколькими when не получилось, сделал через case
...
Рейтинг: 0 / 0
Как сделать ветвление в Merge?
    #39846803
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

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

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

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


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