Question

ma question est, avec quelques informations générales:

Je dois générer des requêtes SQL sur la base des métadonnées de table (colonnes), et le résultat est quelque chose comme:

TABLENAME1|COL1
TABLENAME1|COL2
TABLENAME2|COL1
TABLENAME2|COL2
TABLENAME2|COL3
TABLENAME3|COL1
TABLENAME4|COL1
TABLENAME4|COL2
... /*some other 1800 rows */

(Oui, il est ordonné.) Ce que je dois est de transposer ces données, en fonction de la première colonne, de sorte que le résultat attendu serait:

TABLENAME1|COL1|COL2|NULL
TABLENAME2|COL1|COL2|COL3
TABLENAME3|COL1|NULL|NULL
TABLENAME4|COL1|COL2|NULL
/* less then 1800 rows ;-) */

Est-il possible en utilisant Oracle SQL?

Merci d'avance!

Était-ce utile?

La solution

Si vous voulez générer la requête pour chaque appel ou d'utiliser un nombre hardcoded colonnes-max, 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

un coup d'oeil à Tom Kyte stragg .

Autres conseils

Le mot-clé que vous cherchez est pivot. Voici un exemple de son utilisation. La syntaxe apparaît généralement les mêmes que MSSQL, et que je ne connais pas l'URL pour la documentation d'Oracle Je vais lancer le documentation Oracle , recherche pour suffisamment de fois de pivot et vous obtiendrez les détails.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top