2017-06-01 7 views
0

後は私にエラーを与えているクエリです::単一行のサブクエリが1行01427. 00000以上のものを返します - 「単一行副問合せで複数の行を返す」

  • ed_tempた場合とed_indv_countersは、edg_trace_idを使用して結合されます。
  • もしEd_eligiblityがcurrent_elig_indを 'P'とするならば、それをedg_trace_idとし、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個のカラムがあり、それによってパフォーマンス上の問題が発生しています –

関連する問題