2010-02-26 5 views
3

J'ai une requête qui renvoie toujours une ligne, avec plusieurs colonnes. Je voudrais transformer cela en 2 colonnes et plusieurs rangées.Transposer une ligne en plusieurs lignes Oracle

Résultats Original:

Col1, Col2, Col3, Col4 
---------------------- 
val1, val2, val3, val4 

Ce que je veux:

ColName, Value 
-------------- 
Col1, val1 
Col2, val2 
Col3, val3 
Col4, val4 

Est-ce possible?

EDIT (clarification)

Je suis à la recherche d'un moyen automatique de le faire. IE quelque chose que je peux transmettre les résultats de toute requête qui ne renvoie que 1 ligne.

Répondre

2

Utilisez-vous Oracle 11g? Avez-vous essayé pivot et unpivot?

Plus d'infos here.

+0

J'ai unpivot. Cela ne fait toujours pas exactement ce que je veux, mais je vais séparer cela en une deuxième question. –

+0

Note pour la postérité: cela ne fonctionne que si toutes vos colonnes ont le même type de retour. Vous pouvez contourner ce problème en les publiant tous via to_char() –

+0

Exemple: http://stackoverflow.com/questions/2345010/have-unpivot-automatically-grab-column-list-oracle-11g – Vadzim

3

bien sûr. Do

select 'Col1' ColName, Col1 Value from srctable union all 
select 'Col2', Col2 from srctable union all 
select 'Col3', Col3 from srctable union all 
select 'Col4', Col4 from srctable 
+0

Hmm. Cela ferait l'affaire. J'espčre qu'il y a une façon automatique de le faire, cependant ... –

0

Je suppose que vous ne disposez pas de la version Oracle avec le support de la table Pivot. Malheureusement, ce code n'est jamais très propre, car vous devez construire chaque ligne.

Voir cet article pour un exemple plus

transpose-select-results-with-oracle

Questions connexes