2016-08-18 3 views
0

Мне задали этот вопрос в интервью и не смогли его взломать. У меня есть таблица Employee со следующими значениямиПереместить все строки в столбцы в Oracle

Id Name Sal 
1 Sid 1000 
2 Jon 800 
3 Ram 600 

Хочу выход, который будет отображаться следующим образом:

1  2  3 
Sid Jon  Ram 
1000 800  600 

строк до т.е. столбцов.

Я использовал случай/декодирование для того же. Но он требовал другого ответа, поскольку могло быть много столбцов, и он не хотел использовать декодирование для всех. Я искал в сети для Pivot и некоторых других функций, но не смог сделать запрос, который мог бы предоставить мне этот результат. Можно ли получить выход в вышеупомянутом формате? Если да, я могу получить запрос для этого. Я использую оракул.

Спасибо заранее.

ответ

0

Вы можете использовать listagg():

select listagg(id, ' ') within group (order by id) as list from employee union all 
select listagg(name, ' ') within group (order by id) from employee union all 
select listagg(sal, ' ') within group (order by id) from employee 

или что-то вроде этого/SQL блок PL:

declare 
    type lines is varray(3) of varchar2(32767); 
    ls lines := lines('', '', ''); 
begin 
    for r in (select id, name, sal from employee) loop 
    ls(1) := ls(1)||r.id||' '; 
    ls(2) := ls(2)||r.name||' '; 
    ls(3) := ls(3)||r.sal||' '; 
    end loop; 
    for i in 1..3 loop dbms_output.put_line(ls(i)); end loop; 
end; 
+0

Спасибо за ответ, но я не должен использовать PL/SQL. Также в случае, если в таблице указано 30 столбцов, то в соответствии с данным запросом мне нужно будет использовать 29 «Союз всех», что невозможно. Есть ли другой метод? – kash

+0

Хммм ... Нет 'decode', никаких союзов, PL/SQL ;-) Я не знаю других способов, может быть, других пользователей. –

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