2015-11-03 39 views
0

我很樂意爲您提供幫助。從表中提取子數據

我有這樣一個表:

[MS_CODE] [MS_SML] 
1   43 
1   AA 
2   51 
3   24 
3   21 
4   11 
4   43 
5   AA 
6   11 

我想要寫一個查詢,將檢索算法爲[MS_SML]這組示出了(1或2或3)和(4或5或6)在[MS_Code]中。

例如:

43,AA因爲43是在一排,其中ms_code是1和4和同爲 'AA'。我想創建這樣的輸出:

[MS_Code] [MS_SML] 
1   43 
4   43 
1   AA 
5   AA 

非常感謝您的幫助!

回答

1

一種方法是使用exists並應用標準:

select t.* 
from t 
where exists (select 1 
       from t t2 
       where t2.ms_sml = t1.ms_sml and t2.ms_code in (1, 2, 3) 
      ) and 
     exists (select 1 
       from t t2 
       where t2.ms_sml = t1.ms_sml and t2.ms_code in (4, 5, 6) 
      ); 
+0

謝謝!但在我需要更換?選擇t。*? – oco

0

下面是做到這一點的方法之一。

select ms_code, ms_sml 
from msc 
where ms_sml in 
(
    select ms_sml 
    from msc 
    where ms_code in (1,2,3) 
    intersect 
    select ms_sml 
    from msc 
    where ms_code in (4,5,6) 
) 
order by ms_sml, ms_code 

注:如果有一個以上的ms_code在同一組給定的ms_sml,這將返回所有的人。 假設AA被映射到1,3和5,這將返回

1 AA 
3 AA 
5 AA 

如果這是一個問題,我們可能需要額外的邏輯來處理是:例如選擇的羣組內ms_code的最小值。