case表达式,用于更改列的值

时间:2016-05-11 06:10:41

标签: mysql sql

我有两列measurement_unitmeasurement_sizemeasurement_unit列中的值为ml,gm,litremeasurement_size的值为200,1300,2000我已将measurement_size的所有值转换为.2,1.3,2的圆形图,现在我想将measurement_unit的值更改为literkg,这是我的案例表达。但它不工作......我应该怎么做?另外它不是更新查询我正在为我的报告做这个..它不会改变数据库中的任何值..

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

2 个答案:

答案 0 :(得分: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

如果您想确保没有人看到您的单位处于中间状态,则可能需要进行交易。

答案 1 :(得分: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