2013-12-24 2 views
-2

У меня есть таблица «table_bla»Создания запроса базы данных, измените значение в зависимости от значения другой ячейки

IMAGE http://gaskoncev.net/assets/table.png

Plese помочь мне создающий MySQL запроса.

Описание:

  • Выберите OBJ_ID первое ненулевое значение из float_val от FIELD_ID 208,209,210
  • Если это значение> 1000 и < 2000, а затем обновление rev_val до 1, это obj_id, где FIELD_ID = 402
  • Если это значение> 2000 и < 5000, а затем обновление rev_val до 2, это OBJ_ID, где FIELD_ID = 402
  • Если это значение> 5000 и < 10000, Затем обновление этого rev_val до 3, это OBJ_ID, где FIELD_ID = 402
  • Если это значение> 10000 и 20000 <, а затем обновление rev_val до 4, эта OBJ_ID, где FIELD_ID = 402
  • ..
  • другой : 5

Спасибо!

+0

выглядит как домашнее задание мне – nik

ответ

0

Попробуйте это:

UPDATE table_bla AS t 
INNER JOIN (SELECT obj_id, float_val AS `value` 
      FROM table_bla 
      WHERE field_id IN (208,209,210) AND float_val IS NOT NULL 
      GROUP BY obj_id) AS A ON t.obj_id = A.obj_id 
SET rev_val = (CASE WHEN `value` BETWEEN 1000 AND 2000 THEN 1 
        WHEN `value` BETWEEN 2000 AND 5000 THEN 2 
        WHEN `value` BETWEEN 5000 AND 10000 THEN 3 
        WHEN `value` BETWEEN 10000 AND 20000 THEN 4 
        ELSE 5 
       END) 
WHERE field_id = 402; 
+0

Где 'UPDATE' часть запроса, чтобы обновить' rel_val' в соответствующей строке? – Barmar

1
UPDATE yourTable AS t1 
JOIN (SELECT obj_id, MIN(float_val) AS f 
     FROM yourTable 
     WHERE field_id in (208, 209, 210) 
     GROUP BY obj_id) t2 
ON t1.obj_id = t2.obj_id 
SET rel_val = CASE WHEN f BETWEEN 1001 and 1999 THEN 1 
        WHEN f BETWEEN 2001 AND 4999 THEN 2 
        WHEN f BETWEEN 5001 AND 9999 THEN 3 
        WHEN f BETWEEN 10001 AND 19999 THEN 4 
        ELSE 5 
       END 
WHERE t1.field_id = 402 
Смежные вопросы