sql >> Database teknologi >  >> RDS >> Mysql

Opdater totalen baseret på den foregående række af saldo

Her kommer en løsning med hjælp fra én brugervariabel.

Resultatet er verificeret med den fulde demo vedhæftet.

SQL:

-- data preparation for demo create table tbl(Name char(100), id int, Col1 int, Col2 int, Col3 char(20), Col4 char(20), Total int, Balance int); insert into tbl values ('Row1',1,6,1,'A','Z',0,0), ('Row2',2,2,3,'B','Z',0,0), ('Row3',3,9,5,'B','Y',0,0), ('Row4',4,12,8,'C','Y',0,0); SELECT * FROM tbl; -- Query needed SET @bal = 0; UPDATE tbl SET Total = CASE WHEN Col3 = 'A' and Col4 <> 'Z' THEN Col1+Col2 WHEN Col3 = 'B' and Col4 <> 'Z' THEN Col1-Col2 WHEN Col3 = 'C' and Col4 <> 'Z' THEN Col1*Col2 ELSE 0 END, Balance = (@bal:[email protected] + Total); SELECT * FROM tbl;

Output (som forventet):

mysql> SELECT * FROM tbl;
+------+------+------+------+------+------+-------+---------+
| Name | id   | Col1 | Col2 | Col3 | Col4 | Total | Balance |
+------+------+------+------+------+------+-------+---------+
| Row1 |    1 |    6 |    1 | A    | Z    |     0 |       0 |
| Row2 |    2 |    2 |    3 | B    | Z    |     0 |       0 |
| Row3 |    3 |    9 |    5 | B    | Y    |     0 |       0 |
| Row4 |    4 |   12 |    8 | C    | Y    |     0 |       0 |
+------+------+------+------+------+------+-------+---------+
4 rows in set (0.00 sec)

mysql> -- Query needed
mysql> SET @bal = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> UPDATE tbl
    -> SET
    ->     Total = CASE    WHEN Col3 = 'A' and Col4 <> 'Z'
    ->                         THEN Col1+Col2
    ->                     WHEN Col3 = 'B' and Col4 <> 'Z'
    ->                         THEN Col1-Col2
    ->                     WHEN Col3 = 'C' and Col4 <> 'Z'
    ->                         THEN Col1*Col2
    ->                     ELSE 0 END,
    ->     Balance = (@bal:[email protected] + Total);
Query OK, 2 rows affected (0.00 sec)
Rows matched: 4  Changed: 2  Warnings: 0

mysql>
mysql> SELECT * FROM tbl;
+------+------+------+------+------+------+-------+---------+
| Name | id   | Col1 | Col2 | Col3 | Col4 | Total | Balance |
+------+------+------+------+------+------+-------+---------+
| Row1 |    1 |    6 |    1 | A    | Z    |     0 |       0 |
| Row2 |    2 |    2 |    3 | B    | Z    |     0 |       0 |
| Row3 |    3 |    9 |    5 | B    | Y    |     4 |       4 |
| Row4 |    4 |   12 |    8 | C    | Y    |    96 |     100 |
+------+------+------+------+------+------+-------+---------+
4 rows in set (0.00 sec)
 


  1. Kald til udefineret funktion oci_connect, php_oci8_12c.dll, windows 8.1, php5.6.6

  2. Hvordan parametriserer jeg en nul-streng med DBNull.Value klart og hurtigt

  3. fejl ved indsættelse af android.database.sqlite.sqliteconstraintexception fejlkode 19 begrænsning mislykkedes

  4. 12c Adaptive planer i SQL Developer