选择值为零或零的列

时间:2019-03-14 18:10:15

标签: mysql sql database

我有这个table,我想将列单元格的值增加1,其中null为零或0到5。当单元格中的值为6时,我要增加下一列。重复一遍。当行中每一列的值为6时,我需要转到下一行并执行相同的操作。例如:我更新第一行的第01列,添加1。下一个查询,添加1,..当值为6时,我需要对第02列做相同的事情。最好的方法是什么?谢谢

此数据库是存储数据库,每个单元格值代表该位置有多少盒子

before

after

CREATE TABLE `ciselnik_sklad_regal_pozice` (
 `REGAL` int(10) unsigned NOT NULL,
 `POLICE` varchar(1) NOT NULL,
 `POZICE` varchar(5) NOT NULL,
 `01` varchar(45) DEFAULT NULL,
 `02` varchar(45) DEFAULT NULL,
 `03` varchar(45) DEFAULT NULL,
 `04` varchar(45) DEFAULT NULL,
 `05` varchar(45) DEFAULT NULL,
 `06` varchar(45) DEFAULT NULL,
 `07` varchar(45) DEFAULT NULL,
 `08` varchar(45) DEFAULT NULL,
 `09` varchar(45) DEFAULT NULL,
 `10` varchar(45) DEFAULT NULL,
 `11` varchar(45) DEFAULT NULL,
 `12` varchar(45) DEFAULT NULL,
 `13` varchar(45) DEFAULT NULL,
 `14` varchar(45) DEFAULT NULL,
 `15` varchar(45) DEFAULT NULL,
 `16` varchar(45) DEFAULT NULL,
 `17` varchar(45) DEFAULT NULL,
 `18` varchar(45) DEFAULT NULL,
 `19` varchar(45) DEFAULT NULL,
 `20` varchar(45) DEFAULT NULL,
 `21` varchar(45) DEFAULT NULL,
 `22` varchar(45) DEFAULT NULL,
 `23` varchar(45) DEFAULT NULL,
 `24` varchar(45) DEFAULT NULL,
 `25` varchar(45) DEFAULT NULL,
 `26` varchar(45) DEFAULT NULL,
 `27` varchar(45) DEFAULT NULL,
 `28` varchar(45) DEFAULT NULL,
 `29` varchar(45) DEFAULT NULL,
 `30` varchar(45) DEFAULT NULL,
 `31` varchar(45) DEFAULT NULL,
 `32` varchar(45) DEFAULT NULL,
 `33` varchar(45) DEFAULT NULL,
 `34` varchar(45) DEFAULT NULL,
 `35` varchar(45) DEFAULT NULL,
 `36` varchar(45) DEFAULT NULL,
 `37` varchar(45) DEFAULT NULL,
 `38` varchar(45) DEFAULT NULL,
 `39` varchar(45) DEFAULT NULL,
 `40` varchar(45) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8

2 个答案:

答案 0 :(得分:1)

您可以尝试一下。

UPDATE TestTable SET 
`01` = CASE WHEN `01` < 6 THEN `01`+1 ELSE `01` END,
`02` = CASE WHEN `01` = 6 AND `02` < 6 THEN `02`+1 ELSE `02` END,
`03` = CASE WHEN `02` = 6 AND `03` < 6 THEN `03`+1 ELSE `03` END,
`04` = CASE WHEN `03` = 6 AND `04` < 6 THEN `04`+1 ELSE `04` END,
`05` = CASE WHEN `04` = 6 AND `05` < 6 THEN `05`+1 ELSE `05` END,
`06` = CASE WHEN `05` = 6 AND `06` < 6 THEN `06`+1 ELSE `06` END,
`07` = CASE WHEN `06` = 6 AND `07` < 6 THEN `07`+1 ELSE `07` END;

答案 1 :(得分:0)

您应该能够通过一个查询来做到这一点。如果需要,添加一个where子句。

UPDATE `table`
SET `01` = if(`01` >= 6,6,`01`+1),
    `02` = if(`02` >= 6,6,if(`01` = 6 AND COALESCE(`01`,0) => 0,`02`+1,`02`)),
    `03` = if(`03` >= 6,6,if(`02` = 6 AND COALESCE(`02`,0) => 0,`03`+1,`03`)),
    etc...
相关问题