在MySQL中有一个表包括ID,DAT,AMN,FLWC,FLWD,TYP。我想按DAT和ID排序表(DAT是排序中的第一个关键字)然后根据TYP从先前记录更新FLWC和FLWD。例如,如果0:先前记录和1:当前记录,则:
if typ1==d then (flwc1=flwc0 AND flwd1=flwd0+amn1)
if typ1==c then (flwc1=flwc0+amn AND flwd1=flwd0)
你可以看到flwc和flwd将被设置为下一条记录,其中一条将是AMN的总和,取决于TYP值。
更改前的表格:
-- id__dat__amn__flwc__flwd__typ
-- 1 10 100 0 0 d
-- 2 11 200 0 0 c
-- 3 12 300 0 0 d
-- 4 13 400 0 0 c
-- 5 14 500 0 0 d
-- 6 15 600 0 0 c
-- 7 16 700 0 0 d
更新后的表:
-- id__dat__amn__flwc__flwd__typ
-- 1 10 100 0 100 d
-- 2 11 200 200 100 c
-- 3 12 300 200 400 d
-- 4 13 400 600 400 c
-- 5 14 500 600 900 d
-- 6 15 600 1200 900 c
-- 7 16 700 1200 1600 d
我是在MS SQL服务器上做过的,但在这种情况下MySQL似乎很差(在更新查询期间设置值为参数),MS SQL Server中的解决方案:
declare @sumc decimal
declare @sumd decimal
set @sumc=0
set @sumd=0
update myTable set
@sumc+= case typ when 'c' then amn else 0 end, flwc=@sumc,
@sumd+= case typ when 'd' then amn else 0 end, flwd=@sumd
我需要MySQL中的上述查询。感谢
答案 0 :(得分:0)
可以使用MySQL完成。
一个可能有用的例子。
表:
CREATE TABLE `test` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Incrementar` INT(11) NOT NULL,
PRIMARY KEY (`Id`)
);
插入测试记录:
INSERT INTO `test` (`Incrementar`) VALUES (0);
INSERT INTO `test` (`Incrementar`) VALUES (0);
INSERT INTO `test` (`Incrementar`) VALUES (0);
INSERT INTO `test` (`Incrementar`) VALUES (0);
更新:
SET @tempVariable = 1;
UPDATE test SET Incrementar = (@tempVariable:=@tempVariable+1)
结果:
Id Incrementar
1 2
2 3
3 4
4 5
答案 1 :(得分:0)
我以前的回答就是一个例子。你需要的是:
SET @sumc=0;
SET @sumd=0;
UPDATE myTable SET
flwc= (SELECT @sumc := IF(typ = 'c', amn + @sumc, @sumc)),
flwd= (SELECT @sumd := IF(typ = 'd', amn + @sumd, @sumd));