Как в SQL запросе изменить значение поля, в зависимости от значения в другом поле?

Здравствуйте, помогите составить запрос, есть таблица:
obj_id  |  field_id  |  rel_val  |  float_val
22        | 208      | NULL    |  1999
22        | 402      | 1          |  NULL
......
25      | 208        | NULL     | 2100
25      | 402         | 2          | NULL
...
29       | 208 | NULL | 7100
29      | 402 | 3 | NULL

Запрос на "словах" звучит так:
если field_id = 208 и в этой то строчке float_val больше 1000 и меньше 2000,
то в строчке с таким же obj_id, найти field_id = 402 и обновить rev_val на 1
Если
если field_id = 208 и в этой то строчке float_val больше 2000 и меньше 3000,
то в строчке с таким же obj_id, найти field_id = 402 и обновить rev_val на 2

Спасибо
  • Вопрос задан
  • 5962 просмотра
Решения вопроса 1
@uJlJluduAH Автор вопроса
Вот такое решение меня спасло.
UPDATE table AS t1
JOIN (SELECT obj_id, MIN(float_val) AS 'f'
      FROM table
      WHERE field_id in (208, 209, 210)
      GROUP BY obj_id) t2
ON cms3_object_content_copy.obj_id = t2.obj_id
SET rel_val = CASE WHEN f BETWEEN 0 AND 999 THEN 1
                   WHEN f BETWEEN 1000 AND 2000 THEN 2
                   ELSE 3
              END
WHERE table.field_id = 402
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
fornit1917
@fornit1917
Не проверял, но имхо как-то так должно работать (без использования T-SQL или других расширений).
Написал для первого случая, для второго аналогично

UPDATE t as t1 
SET rev_val=1
WHERE t1.field_id=402 AND t1.obj_id IN (
    SELECT t2.obj_id FROM t as t2 
          WHERE t2.field_id=208 AND t2.float_val>1000 AND t2.float_val<2000
);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы