2017-06-01 117 views
0

以下是這是給我的錯誤查詢:ORA-01427:單行子查詢返回不止一行01427. 00000 - 「單行子查詢返回多個行」

  • 如果ed_temp和ed_indv_counters使用edg_trace_id進行連接。
  • 如果Ed_eligiblity將current_elig_ind設置爲'P',那麼採用該edg_trace_id else,將edg_trace_id與current_elig_ind'A'相加。

查詢:

select distinct 
     i.edg_trace_id, 
     i.* 
from ed_indv_counters i, 
     ed_temp e 
where e.case_num = '720335' 
and e.payment_beg_dt<'30-JUL-2017' 
and e.program_cd = 'TF' 
and e.delete_sw='N' 
and di_ind='Y' 
and counter_type_cd='TLP' 
and i.edg_trace_id in (
     CASE e.current_elig_ind 
     WHEN 'P' then e.edg_trace_id 
     ELSE (
      Select e1.edg_trace_id 
      from ed_temp e1 
      where e1.case_num='720335' 
      and e1.program_cd = 'TF' 
      and e1.delete_sw='N' 
      and e1.current_elig_ind='A' 
      and e1.payment_beg_dt not in (
        select payment_beg_dt 
        from ed_temp e2 
        where e2.current_elig_ind='P' 
        and e2.case_num='720335' 
        and e2.delete_sw='N' 
        and e2.program_cd = 'TF' 
       ) 
     ) 
     END 
     ) 
order by i.counter_begin_dt; 

回答

0

您可以嘗試使用UNION ALL和相互排斥的過濾器,而不是CASE聲明:

select distinct 
     i.edg_trace_id, 
     i.* 
from ed_indv_counters i, 
     ed_temp e 
where e.case_num = '720335' 
and e.payment_beg_dt < DATE '2017-07-30' -- Use a date literal rather than string 
and e.program_cd = 'TF' 
and e.delete_sw='N' 
and di_ind='Y' 
and counter_type_cd='TLP' 
and i.edg_trace_id in (
     SELECT e.edg_trace_id 
     FROM DUAL 
     WHEN e.current_elig_ind = 'P' 
     UNION ALL 
     Select e1.edg_trace_id 
     from ed_temp e1 
     where (e.current_elig_ind <> 'P' OR e.current_elig_ind IS NULL) 
     and e1.case_num='720335' 
     and e1.program_cd = 'TF' 
     and e1.delete_sw='N' 
     and e1.current_elig_ind='A' 
     and e1.payment_beg_dt not in (
        select payment_beg_dt 
        from ed_temp e2 
        where e2.current_elig_ind='P' 
        and e2.case_num='720335' 
        and e2.delete_sw='N' 
        and e2.program_cd = 'TF' 
       ) 
    ) 
order by i.counter_begin_dt; 
+0

這個查詢作品完美,但有調整它的任何方式。 ed_temp表有100列,並加入這給我的性能問題 –

相關問題