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

Transposer les résultats sélectionnés avec Oracle

Si vous souhaitez générer la requête pour chaque appel ou utiliser un nombre maximal de colonnes codé en dur, vous pouvez faire quelque chose comme ça :

WITH tab AS
(
  SELECT table_name, column_name FROM user_tab_cols WHERE column_id <= 4
) -- user_tab_cols used to provide test data, use your table instead
SELECT MAX(c1) c1,
       MAX(c2) c2,
       MAX(c3) c3,
       MAX(c4) c4
  FROM (SELECT table_name,
               DECODE( column_id, 1, column_name ) c1,
               DECODE( column_id, 2, column_name ) c2,
               DECODE( column_id, 3, column_name ) c3,
               DECODE( column_id, 4, column_name ) c4
          FROM ( SELECT table_name,
                        column_name,
                        ROW_NUMBER() OVER ( PARTITION BY table_name ORDER BY column_name ) column_id
                   FROM tab
               )
       )
 GROUP BY table_name
 ORDER BY table_name

S'il suffit de l'obtenir sous cette forme

TABLENAME1|COL1,COL2
TABLENAME2|COL1,COL2,COL3

jetez un oeil au stragg de Tom Kyte.