2016-12-09 10 views
0

私は次の形式の情報を保持するSQLITEテーブルを持っています。最初の列はID、2番目はID_1、3番目はID_2、最後の列はボリュームです。SQLITEサフィックス

ID  ID_1 ID_2 Volume      
1000 111 0  
1000 111 1       
1000 111 2       
1000 111 3       
1000 112 0       
1000 112 1       
1000 112 2       
1000 112 3       
1000 113 0       

10の以上のユニークなID値、約2000ユニークID_1値とID_2のための4つのユニークな値があります。

最後に、選択したID、選択ID_1、選択ID_2のボリュームを選択します。これまでのことはうまくいく。出力フォーマットは - ID、ID_1、ボリュームでなければなりません。

私が混乱しているのは、以下のデータを取得することです。そうであるように、次に指定したIDとID_1について

、ID_2 IF = 1、

Volume = (Volume for ID, ID_1 and ID_2 = 1) - (Volume for ID, ID_1 and ID_2 = 2)- (Volume for ID, ID_1 and ID_2 = 3) 

そうでない場合、印刷体積:

Iは、以下のデータを必要とします。

私はこのデータをcsvファイルで抽出するためにpythonを使用しています。私はvalue1とvalue2にIDとID_1を格納しようとしており、それをサブクエリで使用しようとしていますが、動作していないようです。

私のコードは次のようになります。

import os 
import sqlite3 
import shutil 
import csv 
import time 
import datetime 
from pprint import pprint 

value1 ="va" 
value2 ="pa" 

working_dir = "C:\Path" 

aimsun_db_filename = os.path.join(working_dir,"File.sqlite") 

conn = sqlite3.connect(filename) 

c= conn.cursor() 


SQL = ''' 

SELECT 
    TableName.ID '''= value1 +''', 
    TableName.ID_1 '''= value2 +''',   
    CASE WHEN ID_2 = 1 THEN 
      (SELECT TableName.volume 
      FROM TableName 
      WHERE 
      ID_2 = 2 and 
      TableName.oid = '''+value1+''' AND 
      TableName.did = '''+value2+''' 
      ) 
     WHEN ID_2 = 2 THEN 
      TableName.volume 
     WHEN ID_2 = 3 THEN 
      TableName.volume 
     ELSE 
      "Other" 
     END, 
    FROM TableName 
    WHERE 
     AND NOT sid = 0 
     AND NOT ent = 0 
''' 

with conn: 
c = conn.cursor() 
c.execute(SQL) 
while True: 
    row = c.fetchone() 

    if row ==None: 
     break 
+0

何だろうがたとえば、 'ID_1 = 2'と' ID_2 = 3'の場合はどうなりますか?私はあなたがしようとしていることに対する明白なパターンを見ていない。 –

+0

ID_2 = 2代表車; ID_2 = 3大型車両を表します。 ID_2 = 1すべての車両を表します。だから、最終的に私はバスのためのボリュームを与える1-(2 + 3)が欲しい。 – Neyotalks

+0

ID_2 = 0はすべてのPCUを表します – Neyotalks

答えて

関連する問題