2017-08-23 69 views
0

我想如何在SQLite中创建条件SUM。我创建了这个例子:SQLite有条件SUM

表之前SQL操作

ID1 ID2 Value TOTAL 
------------------------------- 
    1     None 
      1  7.00 None 
      1  1.00 None 
      1  1.00 None 
      1  3.00 None 
      1  2.00 None 
    2     None 
      2  5.00 None 
      2  1.00 None 
    3     None 
      3  7.00 None 
      3  1.00 None 
      3  1.00 None 
      3  3.00 None 

上表是不作任何修改的数据呢。如果ID1 = ID2,我想对该值进行求和,并将结果发布到“TOTAL”列中。

表SQL动作后

ID1 ID2 Value TOTAL 
------------------------------- 
    1     14.00 
      1  7.00 None 
      1  1.00 None 
      1  1.00 None 
      1  3.00 None 
      1  2.00 None 
    2     6.00 
      2  5.00 None 
      2  1.00 None 
    3     12.00 
      3  7.00 None 
      3  1.00 None 
      3  1.00 None 
      3  3.00 None 

我已经试过这没有成功:

curOperations.execute('UPDATE TABLE1 SET TOTAL = 
(SELECT SUM(CASE WHEN ID1 = ID2 THEN Value ELSE 0 END) as Value FROM TABLE1)') 

编辑

所以,我已经找到了一种方法以获得SUM颇为简单Y:

SELECT ID2, SUM(Value) FROM Table GROUP BY ID2 

随着我获得该表:

ID2 SUM(Value) 
------------------------ 
    1  14.00 
    2  6.00 
    3  12.00 

我现在要做的唯一事情是将这些值传递到“主”表

任何想法?

回答

1

您必须使用更新的子查询 - 唯一棘手的部分是,别名必须在子查询:

curOperations.execute('''UPDATE table1 SET total = (SELECT SUM(value) 
    FROM table1 int 
    WHERE int.id2 = table1.id1) 
    WHERE id1 IS NOT NULL''') 
+0

但只有一些行应该被更新。 –

+0

@CL。此查询只更新具有非空ID1的行,并给出在* TABLE AFTER SQL ACTION *显示中显示的值。 –

+0

UPDATE修改所有行,甚至那些子查询返回NULL的地方。 –