Convertir des lignes en colonnes dans Oracle : tirer parti de DECODE et PIVOT
Problème :
Transformer un tableau avec des lignes représentant plusieurs types de documents et identifiants associés à un numéro de prêt dans un format en colonnes. Le tableau résultant doit avoir une seule ligne pour chaque numéro de prêt, avec des colonnes pour chaque type de document et l'ID correspondant.
Exemple :
Tableau d'entrée :
LOAN NUMBER | DOCUMENT_TYPE | DOCUMENT_ID |
---|---|---|
992452533663 | Voters ID | XPD0355636 |
992452533663 | Pan card | CHXPS5522D |
992452533663 | Drivers licence | DL-0420110141769 |
Sortie souhaitée :
LOAN NUMBER | VOTERS_ID | PAN_CARD | DRIVERS LICENCE |
---|---|---|---|
992452533663 | XPD0355636 | CHXPS5522D | DL-0420110141769 |
Oracle Solutions :
Méthode DECODE :
SELECT loan_number, MAX(DECODE(document_type, 'Voters ID', document_id)) AS voters_id, MAX(DECODE(document_type, 'Pan card', document_id)) AS pan_card, MAX(DECODE(document_type, 'Drivers licence', document_id)) AS drivers_licence FROM input_table GROUP BY loan_number ORDER BY loan_number;
Clause PIVOT (Oracle 11g) :
SELECT * FROM input_table PIVOT ( MAX(document_id) FOR document_type IN ('Voters ID','Pan card','Drivers licence') );
Les deux méthodes transposent efficacement les lignes en colonnes, obtenant ainsi le résultat souhaité. Explorez les liens référencés pour plus de détails sur Oracle DECODE et PIVOT.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!