2010-02-26 26 views
2

Ceci est une question de suivi à Transpose one row into many rows OracleHave UNPIVOT saisir automatiquement la liste des colonnes (Oracle 11g)

Je veux être en mesure de UNPIVOT un résultat de requête arbitraire.

Pour UNPIVOT manuellement une table, je le ferais:

select value_type, value from (
(
    -- query to be unpivoted 
    -- EG: select col1, col2, col3, col4, col5 from table 
) 
unpivot 
(
    -- Line I would like to change 
    value for value_type in (col1, col2, col3, col4, col5) 
) 
); 

Cela fonctionne pour toutes les requêtes qui retournent 5 colonnes, appelé col1, col2, etc. Y at-il quelque chose que je mets à la place de value for value_type in (col1, col2, col3, col4, col5) qui saisira toutes les noms de colonnes de la requête/vue/table sélectionnée dans la première partie?

Répondre

2

Vous pouvez créer une procédure stockée pour cela en PL/SQL en créant dynamiquement votre instruction SQL sous forme de chaîne puis en utilisant execute immediate pour l'exécuter et retourner un curseur.

+1

Voici une réponse détaillée avec le code: http://stackoverflow.com/questions/15100101/unpivot-on-an-indeterminate-number-of-columns – Vadzim