Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql sql如何按条件添加值并放入特定列_Mysql_Sql - Fatal编程技术网

Mysql sql如何按条件添加值并放入特定列

Mysql sql如何按条件添加值并放入特定列,mysql,sql,Mysql,Sql,这是表和表中的数据 表: 我需要有以下数据的表格 期望结果: 是否要将总值放在最后一个非零列中 select id, value_total, (case when value_2 = 0 and value_3 = 0 and value_4 = 0 and value_1 > 0 then value_total else 0 end) as value_1, (case when value_3 = 0 and v

这是表和表中的数据

表:

我需要有以下数据的表格

期望结果:


是否要将总值放在最后一个非零列中

select id, value_total,
       (case when value_2 = 0 and value_3 = 0 and value_4 = 0 and value_1 > 0
             then value_total else 0
        end) as value_1,
       (case when value_3 = 0 and value_4 = 0 and value_2 > 0
             then value_total else 0
        end) as value_2,
       (case when value_4 = 0 and value_3 > 0
             then value_total else 0
        end) as value_3,
       (case when value_4 > 0 then value_total else 0 end)
from t;

这个场景有很多种方法,下面提到了其中一种,请看一看

UPDATE TABLE
SET value_1 = 0
    ,value_2 = CASE 
        WHEN id = 3
            THEN 300
        ELSE 0
        END
    ,value_3 = CASE 
        WHEN id = 2
            THEN 200
        ELSE 0
        END
    ,value_4 = CASE 
        WHEN id = 1
            THEN 100
        WHEN id = 4
            THEN 400
        ELSE 0
        END

你怎么知道该值应该放在哪一列?你能解释一下吗。该值将放在不是0的列和最后一列…是的,但是如果我的值是动态的,该怎么做?例如,它取决于输入。。。我想你又改变了你的问题。您从未提到列是动态的,或者有8个不同的值列。但是,如果是这样的话,您可以将上面发布的代码重新写入列值_8。@azizi。那么你会有一个不同的问题。这回答了您在这里提出的问题。如果你有一个不同的问题,把它当作一个新问题来问。
select id, value_total,
       (case when value_2 = 0 and value_3 = 0 and value_4 = 0 and value_1 > 0
             then value_total else 0
        end) as value_1,
       (case when value_3 = 0 and value_4 = 0 and value_2 > 0
             then value_total else 0
        end) as value_2,
       (case when value_4 = 0 and value_3 > 0
             then value_total else 0
        end) as value_3,
       (case when value_4 > 0 then value_total else 0 end)
from t;
UPDATE TABLE
SET value_1 = 0
    ,value_2 = CASE 
        WHEN id = 3
            THEN 300
        ELSE 0
        END
    ,value_3 = CASE 
        WHEN id = 2
            THEN 200
        ELSE 0
        END
    ,value_4 = CASE 
        WHEN id = 1
            THEN 100
        WHEN id = 4
            THEN 400
        ELSE 0
        END