О - я думаю, я вижу вашу проблему. Ваши подзапросы exists
вообще не присоединены к вашему внешнему запросу, поэтому они всегда возвращают сотни строк. Это будет более понятно, если вы переименуете каждый экземпляр SHP_USER_MST в su1, su2, su3 и т. Д .:
when su.shp_filter in ('ADV','REG','DEAN','DEPT','ATHL') then
case
when exists (select pebempl.pebempl_orgn_code_home, su1.shp_access_id, spriden.spriden_id from pebempl@dblink pebempl
join spriden@gold.ferris.edu spriden
on pebempl.pebempl_pidm=spriden.spriden_pidm
join DWSCHEMA.SHP_USER_MST su1
on substr(su1.shp_access_id,1,8) = substr(spriden.SPRIDEN_ID,1,8)
where spriden.spriden_change_ind is null
and pebempl.pebempl_orgn_code_home like '11%') then 'Office 1'
when exists (select pebempl.pebempl_orgn_code_home, su2.shp_access_id, spriden.spriden_id from pebempl@dblink pebempl
join spriden@gold.ferris.edu spriden
on pebempl.pebempl_pidm=spriden.spriden_pidm
join DWSCHEMA.SHP_USER_MST su2
on substr(su2.shp_access_id,1,8) = substr(spriden.SPRIDEN_ID,1,8)
where spriden.spriden_change_ind is null
and pebempl.pebempl_orgn_code_home like '21%') then 'Office 2'
Если вы посмотрите здесь, ничто в подзапросе не ссылается на текущую строку в su
- поэтому вы проверяете, есть ли ЛЮБЫЕ пользователи в вашем подзапросе. И они всегда так делают, поэтому он всегда возвращает «Офис 1».
Я думаю, вы хотите что-то более похожее на
when su.shp_filter in ('ADV','REG','DEAN','DEPT','ATHL') then
case
when exists (select pebempl.pebempl_orgn_code_home, su.shp_access_id, spriden.spriden_id from pebempl@dblink pebempl
join spriden@gold.ferris.edu spriden
on pebempl.pebempl_pidm=spriden.spriden_pidm
where spriden.spriden_change_ind is null
and substr(su.shp_access_id,1,8) = substr(spriden.SPRIDEN_ID,1,8) -- Link subquery to outer query
and pebempl.pebempl_orgn_code_home like '11%') then 'Office 1'
when exists (select pebempl.pebempl_orgn_code_home, su.shp_access_id, spriden.spriden_id from pebempl@dblink pebempl
join spriden@gold.ferris.edu spriden
on pebempl.pebempl_pidm=spriden.spriden_pidm
where spriden.spriden_change_ind is null
and substr(su.shp_access_id,1,8) = substr(spriden.SPRIDEN_ID,1,8) -- Link subquery to outer query
and pebempl.pebempl_orgn_code_home like '21%') then 'Office 2'
...etc
Я думаю, что это должно сработать для вас, но в качестве дополнительного предложения, я думаю, вы могли бы также переписать этот раздел, чтобы он был немного более эффективным и читабельным.
case (select substr(min(pebempl.pebempl_orgn_code_home),1,2) from pebempl@dblink pebempl
join spriden@gold.ferris.edu spriden
on pebempl.pebempl_pidm=spriden.spriden_pidm
where spriden.spriden_change_ind is null
and substr(su.shp_access_id,1,8) = substr(spriden.SPRIDEN_ID,1,8))
when '11' then 'Office 1'
when '21' then 'Office 2'
when '22' then 'Office 3'
when '31' then 'Academic Affairs'
end