2016-08-23 8 views
0

を破棄しましょう。SQLiteの内部には、私のようなものに見えるお店に関するいくつかのデータを持って重複行を生成するようだと、おそらくいくつかの他の行に

私は、既存のSQLiteのクエリがあります。

select s.COMSERNO, s.COMNAME, COMALTNAME, s.COMCODE, s.COMADDR, s.COMPCODE, s.COMCITY, x.lastVisit, y.memoText, l.COMCALL 

from TCOMPANY s 

left outer join (select COMSERNO, max(CALEDATE || CALESTART) as lastVisit from TCALENTR where SALMSERN='000000000000019' and (CALEDATE || CALESTART) < strftime('%Y%m%d%H%M', 'now', 'localtime') group by COMSERNO) x on (x.COMSERNO=s.COMSERNO) 

left outer join (select MEMOSERN1 as comSerno, max(MEMOTEXT) as memoText from TMEMO where MEMOTYPE='0' and 0<length(MEMOTEXT) and MEMOSERN2 in ('Notes')group by MEMOSERN1) y on (y.comSerno=s.COMSERNO) 

left outer join LSALCOM l on l.COMSERNO=s.COMSERNO 

and SALMSERN='000000000000019' 

order by s.COMNAME, s.COMSERNO 

上記リターン174行を。

私はそれが1つを持っている場合は、お店のための「チェーン」を見せたいので、データは次のようなものになります。

want

を、私は別のテーブルを持って、LCOMCOMCOMSERNO中のため私のオリジナルの結果セット(各ショップ)私はこのショップがチェーンの一部であるかどうかを判断する必要があります。

私はCOMSERN2LCOMCOMに参加し、列LCOMATR1が値「チェーン」を持っている場合、それは店COMSERN2がチェーンであることを意味します。その後、COMSERN1LCOMCOMから取り出し、元の表TCOMPANYを使用して検索し、チェーン名を表示します。

inner join LCOMCOM z on (s.COMSERNO=z.COMSERN2)

私は私のクエリに上記の2枚を追加しようとしたが、それは私が期待したもの行いません:

ここに私のコードここ

case when z.lcomatr1 = 'Chain' then (select p.COMNAME from TCOMPANY p inner join LCOMCOM q on (p.COMSERNO=q.COMSERN2) where q.COMSERN1 = z.comsern1) else '' end as Chain

LCOMCOMが参加されています

select s.COMSERNO, s.COMNAME, COMALTNAME, s.COMCODE, s.COMADDR, s.COMPCODE, s.COMCITY, x.lastVisit, y.memoText, l.COMCALL, 

case when z.lcomatr1 = 'Chain' then (select p.COMNAME from TCOMPANY p inner join LCOMCOM q on (p.COMSERNO=q.COMSERN2) where q.COMSERN1 = z.comsern1) else '' end as Chain 

from TCOMPANY s 

left outer join (select COMSERNO, max(CALEDATE || CALESTART) as lastVisit from TCALENTR where SALMSERN='000000000000019' and (CALEDATE || CALESTART) < strftime('%Y%m%d%H%M', 'now', 'localtime') group by COMSERNO) x on (x.COMSERNO=s.COMSERNO) 

left outer join (select MEMOSERN1 as comSerno, max(MEMOTEXT) as memoText from TMEMO where MEMOTYPE='0' and 0<length(MEMOTEXT) and MEMOSERN2 in ('Notes')group by MEMOSERN1) y on (y.comSerno=s.COMSERNO) 

left outer join LSALCOM l on l.COMSERNO=s.COMSERNO 

inner join LCOMCOM z on (s.COMSERNO=z.COMSERN2) 

and SALMSERN='000000000000019' 

order by s.COMNAME, s.COMSERNO 

上記の結果は、174行ではなく548行を返します。一部の店舗は現在4行になります。

4 rows

そして、いくつかのお店ので、同じように、2行に今ある:初期SELECTは348に行数が減少し、それは今、すべてのチェーンのように見えた後

enter image description here

DISTINCTを追加します店舗は2列になっています。

私はここで何が起こっているのかわかりませんが、おそらくを両方ともSELECTで2回指していると間違っています。適切であれば、チェーンを使って174行を取得する方法を教えてもらえますか?

答えて

0

CASE文は必要ではなかったとINNER JOINは括弧SELECTに移動されました:

select DISTINCT s.COMSERNO, s.COMNAME, COMALTNAME, s.COMCODE, s.COMADDR, s.COMPCODE, s.COMCITY, x.lastVisit, y.memoText, l.COMCALL, 

(select p.comname from LCOMCOM q inner join TCOMPANY p on (p.COMSERNO=q.COMSERN1) where q.COMSERN2 = s.comserno and q.lcomatr1 = 'Chain') as Chain 

from TCOMPANY s 

left outer join (select COMSERNO, max(CALEDATE || CALESTART) as lastVisit from TCALENTR where SALMSERN='000000000000019' and (CALEDATE || CALESTART) < strftime('%Y%m%d%H%M', 'now', 'localtime') group by COMSERNO) x on (x.COMSERNO=s.COMSERNO) 

left outer join (select MEMOSERN1 as comSerno, max(MEMOTEXT) as memoText from TMEMO where MEMOTYPE='0' and 0<length(MEMOTEXT) and MEMOSERN2 in ('Notes')group by MEMOSERN1) y on (y.comSerno=s.COMSERNO) 

left outer join LSALCOM l on l.COMSERNO=s.COMSERNO 

and SALMSERN='000000000000019' 

order by s.COMNAME, s.COMSERNO 
関連する問題

 関連する問題