将所有行转置为Oracle中的列

时间:2016-08-18 08:08:55

标签: sql oracle

在面试中我被问到这个问题并且无法破解它。 我有一个带有以下值的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。

先谢谢。

1 个答案:

答案 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;