Как насчет ранжирования строк по DATE_QUAL_CD
?
В этом примере EFFD
существует, поэтому возвращается DATE_VALUE
(100):
SQL> with iso_date (date_value, date_qual_cd) as
2 (select 100, 'EFFD' from dual union all
3 select 200, 'PRIM' from dual union all
4 select 300, 'XXXX' from dual
5 ),
6 temp as
7 (select date_value,
8 date_qual_cd,
9 rank() over (order by case when date_qual_cd = 'EFFD' then 1
10 when date_qual_cd = 'PRIM' then 2
11 else 3
12 end) rn
13 from iso_date
14 )
15 select date_value
16 from temp
17 where rn = 1;
DATE_VALUE
----------
100
SQL>
В этом примере EFFD
не существует, поэтому PRIM
's DATE_VALUE
(200) возвращается:
SQL> with iso_date (date_value, date_qual_cd) as
2 (select 100, 'ABCD' from dual union all
3 select 200, 'PRIM' from dual union all
4 select 300, 'XXXX' from dual
5 ),
6 temp as
7 (select date_value,
8 date_qual_cd,
9 rank() over (order by case when date_qual_cd = 'EFFD' then 1
10 when date_qual_cd = 'PRIM' then 2
11 else 3
12 end) rn
13 from iso_date
14 )
15 select date_value
16 from temp
17 where rn = 1;
DATE_VALUE
----------
200
SQL>
Если не существует ни одного из EFFD
или PRIM
, приведенный выше запрос вернет все строки .Вы не сказали, что делать в этом случае, так что пока - вот что вы получаете.