2016-06-02 18 views
0

Ich versuche Werte aus meiner Datenbank auszuwählen. Gerade jetzt bekomme ich das Ergebnis horizontal angezeigt, aber ich möchte es vertikal.PL/SQL Werte in Zeilen (vertikal) auswählen

SELECT * FROM myTable; 

Mit dieser Abfrage sieht das Ergebnis wie folgt aus:

ID | Name | Age | City_id 
1 A  20 2 

Aber ich will es so aussieht:

1 
A 
20 
2 

Gibt es eine Lösung für mein Problem.

ich tryied UNPIVOT zu verwenden, aber nicht

+2

Versuchen http://stackoverflow.com/a/2228994/18747 –

+0

tun Sie wirklich eine einspaltige CHAR rowset haben müssen von Ihrer Anfrage zurückgegeben? Wenn nicht, würde ich dies in der Präsentationsebene der Anwendung empfehlen. Wenn Sie es zur Entwurfszeit benötigen und Sie SQL Developer verwenden, gibt es auch die "Einzelsatzansicht" in der Tabellenansicht. – dlatikay

Antwort

3

XML- und XQuery-.

select * from xmltable('for $i in ./ROWSET/ROW/* return $i' 
passing xmltype(dbms_xmlgen.getxml('select * from all_objects where rownum < 2')) 
    columns colum_name varchar2(100) path 'local-name()' 
      ,   text varchar2(100) path 'text()' 
    ); 

In Ihrem Fall, können Sie es wie verwenden unten

select text from 
(  
select * from 
xmltable('for $i in ./ROWSET/ROW/* return $i' 
passing xmltype(dbms_xmlgen.getxml('select * from myTable where rownum < 2')) 
    columns colum_name varchar2(100) path 'local-name()' 
      ,text varchar2(100) path 'text()' 
      ) 
) 
+0

Ausgezeichnete Abfrage. +1. Lässt meine 'Gewerkschaftsanfrage' wie von der Steinzeit aussehen :) Edited, um mehr zu OPs Notwendigkeit zu entsprechen. – Utsav

+0

Wie kann ich diese Abfrage in eine Variable VARHCAR2 setzen? Sobald ich es wie << myVariable hinzufügen: = 'Text auswählen ...' >> Ich bekomme den Fehler, dass etwas mit "$ i" falsch ist – Ovoxo

+0

@Ovoxo - Verwenden Sie etwas wie 'wählen Sie Text in myVariable aus .... .. ' – Utsav

-1

ich dieses Beispiel auf XE-Datenbank, Tabelle Mitarbeiter gemacht funktionierte. Sie können Pivot-Klausel verwenden:

select first_name from employees 
pivot(
sum(salary) for department_id in (50) 
); 

Ausgang:

Bruce 
    Luis 
    Den 
    Shanta 
    Renske 
    Oliver 
    Clara 
    Alexis 
... 

.

PIVOT 
(
PIVOT_CLAUSE 
PIVOT_FOR_CLAUSE 
PIVOT_IN_CLAUSE 
) 

KLAUSEL - es ist eine Funktion (hier: sum())

FOR_CLAUSE - bestimmt Daten, die Grundlage sind für crated Spalten

IN_CLAUSE - Bereich dieser Daten bestimmt (hier: department_id, konnte sein hire_date, Augenfarbe, Hundetyp usw.)

+0

Dies erhält die gleiche Ausgabe wie 'select first_name from employees'. Möglicherweise in einer anderen Reihenfolge. Sie verwenden den Wert der geschwenkten Spalte nicht. Und es übersetzt keine Spalten in Zeilen - was ein Unpivot wäre. –

1

Ihre Anforderung nicht viel Sinn machen, aber was Sie erreichen wollen, könnte durch Union

erfolgen

Versuchen Sie, diese

select cast(id as varchar2(20)) as col1 from myTable 
union all 
select Name from mytable 
union all 
select cast(Age as varchar2(20)) from mytable 
union all 
select cast(City_id as varchar2(20)) from mytable