Oracle
 sql >> Base de données >  >> RDS >> Oracle

question de jointure SQL

Vous pouvez utiliser une combinaison d'Analytics (si vous êtes sur une version suffisamment récente d'Oracle) et d'un tableau croisé dynamique pour le faire. Cela devrait fonctionner avec votre jeu de données.

select ndc,
       max(decode(rn, 1, rx_num, null)) rx1,
       max(decode(rn, 2, rx_num, null)) rx2,
       max(decode(rn, 3, rx_num, null)) rx3,
       max(decode(rn, 4, rx_num, null)) rx4
  from (select *
          from (select claims_list.ndc,
                       claims_list.rx_num,
                       row_number() over (partition by claims_list.ndc order by claims_list.date desc) rn
                  from claims_list,
                       (select * 
                          from (select *
                                  from drug_list
                                 where type = 'Generic'
                                order by qty desc
                               )
                         where rownum < 51
                       ) drug_list
                 where drug_list.ndc = claims_list.ndc
               )
         where rn < 5
        order by ndc, rn
       )
group by ndc;

La requête interne utilise des analyses pour extraire les 4 numéros de réception les plus récents pour chaque médicament en fonction de la date de réclamation. Ensuite, nous utilisons un pivot pour passer de 4 lignes par médicament à une ligne avec 4 colonnes.