2015-11-03 73 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的最小值。