2015-11-03 6 views
0

Я был бы рад за вашу помощь.Извлечение вспомогательных данных из таблицы

У меня есть таблица, как это:

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

Я хочу написать запрос, который будет SERACH для [MS_SML], который показывает в группе (1 или 2 или 3) и (4 или 5, или 6) в [MS_Code].

Например:

43, АА, потому что 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

Thank's! но в чем мне нужно заменить? выберите 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 в той же группе, это будет возвращать все из них. Пусть АА отображается в 1, 3 и 5, это вернет

1 AA 
3 AA 
5 AA 

Если это вопрос, то мы, возможно, потребуется дополнительная логика, чтобы иметь дело с этим: например, выбрать минимальное значение ms_code в группе.

Смежные вопросы