Oracle
 sql >> Database >  >> RDS >> Oracle

Unire i dati da 5 tabelle senza valori duplicati e ottenere risultati con stato personalizzato in Oracle 10g

Puoi "classificare" diversi stati in base alla tua logica e quindi scegliere lo stato più recente da essi. Puoi usare la logica simile a quella qui sotto, che spinge verso il basso tutti i "rifiuti".

Assicurati di includere tutti gli altri possibili stati se ti interessa l'ordine per il resto.

with t1 as
( select 1 id, 'Waiver Requested'        status from dual union all
  select 1 id, 'Rejected'        status from dual union all
  select 2 id, 'Waiver Requested'        status from dual union all
  select 2 id, 'Waiver Requested'        status from dual union all
  select 3 id, 'Rejected'                status from dual union all
  select 3 id, 'Rejected'                status from dual union all
  select 4 id, 'Waiver Requested'        status from dual union all
  select 4 id, 'Cancelled'               status from dual
)
select id,
       status,
       max(status) KEEP (DENSE_RANK FIRST
                         order by (case when status ='Rejected' then -1
                                            else 1
                                       end) desc)
          over (partition by id) final_status
  from t1

        ID STATUS           FINAL_STATUS
---------- ---------------- ----------------
         1 Waiver Requested Waiver Requested
         1 Rejected         Waiver Requested
         2 Waiver Requested Waiver Requested
         2 Waiver Requested Waiver Requested
         3 Rejected         Rejected
         3 Rejected         Rejected
         4 Waiver Requested Waiver Requested
         4 Cancelled        Waiver Requested