2016-08-04 6 views
0

Ich habe eine Tabelleoracle zeigen Tisch wie kartesischen Koordinatensystem

create table test_table(
id number(10), 
x number(10), 
y number(10), 
svalue number(10)); 

mit einer Tabelle als

Füllung
declare 
    i integer; 
begin 
    i := 0; 
    for x in 1 .. 10 loop 
     for y in 1 .. 10 loop 
      i := i + 1; 
      insert into test_table 
       (Id, x, y, svalue) 
      values 
       (i, x, y, x + y); 
     end loop; 
    end loop; 
    commit; 
end; 

, wie ich Tisch wie

1 2 3 4 5 Ny 
    1 2 3 4 5 6 
    2 3 4 5 6 7 
    3 4 5 6 7 8 
    Nx 

zeigen können, wo x - Reihen , y - Spalten, svalue - Wert x, y

+1

Ref diese URL zuerst http://StackOverflow.com/Questions/38651147/How-to-transpose-colum-into-row-in-oracle-sql-11g/38653133#38653133 und nach Pivot-Funktion erstellen diese Abfrage ausführen ** Wählen Sie * aus der Tabelle (Pivot ('wählen x, y, svalue von test_table')) ** –

+0

Ich habe ** Oracle Database 11g Express Edition Release 11.2.0.2.0 ** und ** ORA-29913: Fehler in Ausführen von ODCITABLEDESCRIBE Callout ** – a1b0r

+0

Wenn Sie Daten so wie Sie pflegen in Frage, dann wird es funktionieren. –

Antwort

1

wenn wir wollen Schwenkausgang für kartesisches Koordinatensystem

läuft unter Skript erhalten für Pivot-Funktion http://paste.ubuntu.com/21378705/

Pivot-Funktion ist eigentlich ref Cursor erstellen, die dynamischen Spaltenausgang gibt nach oben Skript ausführen Abfrage ruinieren als

select * from table(pivot('select x,y,svalue from test_table')) 

in obige Abfrage select-Anweisung Verwendung wie folgt

select rowsection,columnsection,data from table  

ich hoffe, dass dies helfen wird.

+0

Es ist möglich, etwas in http://paste.ubuntu.com/21378705/ zu ändern, um Datenstrings mit Leerzeichen als Spaltennamen zu verwenden? – a1b0r

+0

ja warum kann wie gemäß unserer Anforderung ändern. –

1

Höre ich erreichen kartesischen Koordinatensystem mit looping test_table.

declare 
    HEAD VARCHAR2(100); 
    CURSOR c1 IS SELECT distinct x rec FROM test_table order by x; 
    CURSOR c2 IS SELECT distinct y rec FROM test_table order by y; 
begin 

    -- for disply header in y 
    for y in c2 loop 
     HEAD := HEAD || lpad(y.rec,4); 
    end loop; 
    DBMS_OUTPUT.put_line(lpad('X',3) || HEAD); 
    -- 

    -- disply value with repect to x and y 
    for x in c1 loop 
     declare 
     STR VARCHAR2(100); 
     CURSOR c2 IS SELECT svalue rec FROM test_table where x= x.rec order by y; 
     begin 
      for y in c2 loop 
      STR := str || lpad(y.rec,4); 
      end loop; 
      DBMS_OUTPUT.put_line(lpad(x.rec,3) || STR); 
     end; 
    end loop; 
    -- 
end; 

ich hoffe, das wird helfen.

Verwandte Themen