2016-08-04 1 views
0

У меня есть таблицаоракула показать таблицу, как декартова система координат

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

с заполнением таблицы в

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; 

как я могу показать таблицу, как

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 

где х - строки , y - столбцы, svalue - значение x, y

+1

ref this url first http://stackoverflow.com/questions/38651147/how-to-transpose-column-into-row-in-oracle-sql-11g/38653133#38653133 и после создания функции поворота запускают этот запрос ** select * from table (pivot ('select x, y, svalue from test_table')) ** –

+0

У меня есть ** Oracle Database 11g Express Edition Release 11.2.0.2.0 ** и ** ORA-29913: ошибка в выполняя выноску ODCITABLEDESCRIBE ** – a1b0r

+0

, если вы используете данные таблицы, о которых вы говорите, тогда она будет работать. –

ответ

1

, если мы хотим получить выходной стержень для декартовой системы координат

запустить ниже скрипт для создания функции поворота http://paste.ubuntu.com/21378705/

функция поворот фактически исй курсор, который даст динамический вывод столбца после того, как губит выше сценарий запуска запроса в

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

в выше запроса выберите использование заявление в качестве следующим образом

select rowsection,columnsection,data from table  

Надеюсь, это поможет.

+0

Можно ли что-то изменить в http://paste.ubuntu.com/21378705/ для использования строки данных с пробелом в качестве имени столбца? – a1b0r

+0

Да, почему это может измениться согласно нашему требованию. –

1

Слушайте, я получаю декартовую систему координат, используя 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; 

Надеюсь, это поможет.

Смежные вопросы