2014-07-25 28 views
0

在MySQL中有一個表包含ID,DAT,AMN,FLWC,FLWD,TYP。我想按DAT和ID排序表(DAT是排序中的第一個關鍵字),然後根據TYP更新先前記錄中的FLWC和FLWD。例如,如果0:此前的紀錄和1:當前記錄,則:在MySQL的UPDATE查詢期間將參數值設置爲

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, [email protected], 
    @sumd+= case typ when 'd' then amn else 0 end, [email protected] 

我需要在MySQL中的上述查詢。謝謝

回答

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); 

UPDATE:

SET @tempVariable = 1; 

UPDATE test SET Incrementar = (@tempVariable:[email protected]+1) 

結果:

Id Incrementar 
1 2 
2 3 
3 4 
4 5 
+0

所以我需要至少一個臨時場(Incrementar)? – Hamid

+0

你看看我的其他答案。 – Barto

+0

但這個答案更好,我完成了我的工作。謝謝 – Hamid

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));