在面试中我被问到这个问题并且无法破解它。 我有一个带有以下值的Employee表
Id Name Sal
1 Sid 1000
2 Jon 800
3 Ram 600
我希望输出显示如下:
1 2 3
Sid Jon Ram
1000 800 600
即行到列。
我使用了case / decode。但他需要不同的答案,因为可能有更多的列,他不想使用解码。 我在网上搜索了Pivot和其他一些功能,但无法进行查询,这可以为我提供此输出。是否有可能以上述格式获得输出?如果是,我可以获得此查询。我正在使用oracle。
先谢谢。
答案 0 :(得分: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
或类似这样的PL / SQL块:
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;