2016-10-18 124 views
0

我有表下面的列和數據條目(樣品)Oracle查詢幫助 - 子查詢分組

EID ROW_NUM ROW_VALUE 
SM  1   E 
SM  2   E 
PM  2   E 
SM  3   E 
AM  3   S 
PM  3   E 
SM  4   E 
AM  4   S 
SM  5   S 
AM  5   E 
PM  5   E 
SM  6   S 
AM  6   E 
PM  6   E 
NM  6   S 

我不得不組由ROW_NUM &刪除記錄匹配於下列組合(精確)

  1. SM = E AND PM = E, 這應該刪除與row_num = 2相關的行& retain row_num = 3。雖然它包含這個組合 它不完全匹配。
  2. SM = S AND AM = E且PM = E, 這應該刪除與row_num = 5相關的行& retain row_num = 6。雖然它包含這個組合 它不完全匹配。

我在尋找如何制定一個查詢,可以刪除或至少返回row_num這種組合?

如果需要

+0

以確保我理解正確,對#1只有在情況相同ROW_NUM用(EID出現了兩次,一次= SM和ROW_VALUE = E)和第二行(EID = PM和ROW_VALUE = E),但如果只有單行存在此ROW_NUM,那麼其有效? – nabeel

+0

要回答你的問題,它應該是確切的組合。例如,row_num = 1的數據,儘管SM = E沒有PM = E的數據。因此它是無效的。 – ashishhsihsa

回答

0

我可以添加更多的信息,我相信這應該這樣做:

select distinct row_num 
from example_table t1 
where 
    not (
     exits (select 1 
       from example_table t2 
       where t2.row_num=t1.row_num and t2.eid='SM' and t2.row_value='E') 
     and 
     exits (select 1 
       from example_table t3 
       where t3.row_num=t1.row_num and t3.eid='PM' and t3.row_value='E') 
    ) 
    and 
    not (
     exits (select 1 
       from example_table t4 
       where t4.row_num=t1.row_num and t4.eid='SM' and t4.row_value='S') 
     and 
     exits (select 1 
       from example_table t5 
       where t5.row_num=t1.row_num and t5.eid='AM' and t5.row_value='E') 
     and 
     exits (select 1 
       from example_table t6 
       where t6.row_num=t1.row_num and t6.eid='PM' and t6.row_value='E') 
    ); 
+1

謝謝。我會盡力回覆回覆。我有58種不同的組合可供選擇。將嘗試至少10個以驗證結果是否正確。 – ashishhsihsa