2017-04-04 72 views
2

是否有人可以帮我缩小我的结果? 三个表设施,样本,位置。使用下面的代码,我可以得到预期的结果,但我只想显示矩阵代码具有多于一个结果(> 1)的记录。在下面的示例中,我只想显示位置代码0689.在其中一个字段中有多个值的情况下选择记录

SELECT DISTINCT f.facility_code, 
       l.sys_loc_code, 
       l.loc_type, 
       s.matrix_code 
FROM dt_sample s join dt_location l on l.facility_id = s.facility_id AND l.sys_loc_code = s.sys_loc_code 
JOIN dt_facility f on f.facility_id = l.facility_id 
WHERE l.loc_type ='TS' 
GROUP BY f.facility_code, l.sys_loc_code, l.loc_type, s.matrix_code 
HAVING COUNT(s.matrix_code)>1 
ORDER BY f.facility_code, l.sys_loc_code, s.matrix_code 

facility_code sys_loc_code loc_type matrix_code 
DUR03   0687    TS   WATER   
DUR03   0688    TS   WATER   
DUR03   0689    TS   SEDIMENT  
DUR03   0689    TS   SW   
DUR03   0689    TS   WATER  

感谢您的帮助。

回答

1

一个使用exists(),以检查是否存在一个给定的facility_idsys_loc_code不同matrix_code选项:

select distinct 
    f.facility_code 
    , l.sys_loc_code 
    , l.loc_type 
    , s.matrix_code 
from dt_sample s 
    inner join dt_location l 
    on l.facility_id = s.facility_id 
    and l.sys_loc_code = s.sys_loc_code 
    inner join dt_facility f 
    on f.facility_id = l.facility_id 
where l.loc_type = 'TS' 
    and exists (
    select 1 
    from dt_sample i 
    where i.facility_id = s.facility_id 
     and i.sys_loc_code = s.sys_loc_code 
     and i.matrix_code <> s.matrix_code 
) 
order by 
    f.facility_code 
    , l.sys_loc_code 
    , s.matrix_code 
+0

我从来没有用过存在()前。正是我所需要的。谢谢。 –

+0

@SWalden乐意帮忙! – SqlZim

相关问题