2017-08-23 18 views
0

SQLiteで条件付きSUMを作成する方法をお伝えしたいと思います。上記の表にはまだそのままのデータであるSQLite条件付きSUM

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 

SQLのアクションの前に

TABLE:私はこの例を作成しました。私はID1 = ID2の場合は値のSUMを作成し、結果を 'TOTAL'列にポストします。

TABLEのSQL ACTION

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

EDIT

だから私は道を見つけました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がNULLでない行のみを更新し、* TABLE AFTER SQL ACTION *表示に表示する値を与えます。 –

+0

UPDATEは、サブクエリがNULLを返す場合でも、すべての行を変更します。 –