2016-06-19 4 views
1

に基づいて取得した値は、私は2つのテーブルがあります。のOracle SQL列

TR_TRN (ID_WS, STORE, STATUS) 
TR_RTL (ID_WS, STORE, ID_LY) 

状態TR_TRN内を19または20

一部のレコードは、ステータス19と20 の両方を持っているのいずれかと

ID_WS and STORE 
:いくつかは、わずか19

二つのテーブルが接合されている(彼らは取引を保留していることを意味する)持っています

TR_TRNテーブルの19というステータスのみを持つTR_RTLのすべてのレコードが必要です。

どうすればよいですか?

答えて

2

あなたはEXISTS()を使用して、このレコードは持っているかどうかを判断するために、内側のクエリでHAVING句を使用することができる唯一のstatus = 19CASE EXPRESSIONと:

SELECT * FROM TR_RTL t 
WHERE EXISTS(SELECT 1 FROM TR_TRN s 
      WHERE s.id_ws = t.id_ws and s.store = t.store 
      HAVING COUNT(CASE WHEN s.status = 19 THEN 1 END) = 1 
       AND COUNT(CASE WHEN s.status = 20 THEN 1 END) = 0) 
0

状態19とドンを持っているすべてのIDの(ID_WS、STORE)を取得するには「Tは、残りの部分は、サブクエリが簡単で、ステータス20次のクエリを使用し

select ID_WS, STORE from TR_TRN where STATUS = 19 
minus 
select ID_WS, STORE from TR_TRN where STATUS = 20; 

を持って選択します。