2016-05-11 4 views
0

У меня есть два столбца и measurement_unitmeasurement_size значения .The в measurement_unit колонки ml,gm,litre й measurement_size имеет значение 200,1300,2000 Я преобразовал все значения measurement_size к круглым, таким как .2,1.3,2 теперь я хочу изменить значения measurement_unit на liter или kg и вот мое выражение в выражении. Но это не работает. Что я должен делать? Кроме того, это не запрос обновления, я делаю это для своего отчета .. это не будет изменить любую стоимость в базе данных ..выражения случая, чтобы изменить значение столбца

CASE WHEN MUC.name='ml' THEN (MUC.name)='Liter' 
    WHEN MUC.name='gm' THEN (MUC.name)='Kg' 
    END AS Measurement, 

ответ

1

Одним из возможных вариантов было бы использовать CASE WHEN внутри UPDATE заявление:

UPDATE MUC 
SET MUC.name = CASE 
    WHEN MUC.name = 'ml' THEN 'Liter'; 
    WHEN MUC.name = 'gm' THEN 'Kg'; 
ELSE MUC.name 
END 

Единственное, что мне не нравится в этом решении является то, что он все равно будет обновить строку, которая не соответствует, используя текущее значение. Если вы действительно хотите только обновить строки, которые вы собираетесь конвертировать, то вы можете попробовать использовать два UPDATE заявления, завернутые в сделке:

START TRANSACTION 
    UPDATE MUC 
    SET MUC.name = 'Liter' WHERE MUC.name = 'ml' 
    UPDATE MUC 
    SET MUC.name = 'Kg' WHERE MUC.name = 'gm' 
COMMIT 

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

+0

Но что такое решение этой колонки measure_size? –

1

Вы можете попробовать это.

select 
CASE WHEN M_unit='ml' THEN 'Liter' 
    WHEN M_unit.name='gm' THEN 'Kg' 
    ELSE M_UNIT 
    END AS Measurement_UNIT, 
M_size/1000 as Measurement_SIZE 
from Table 
Смежные вопросы