暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何使行到列

askTom 2017-05-10
170

问题描述

嗨,汤姆,

create table emp_det
( name varchar2(15),
occupation varchar2(15)
);

insert into emp_det values('samantha','doctor');
insert into emp_det values('julia','actor');
insert into emp_det values('maria','actor');
insert into emp_det values('meera','singer');
insert into emp_det values('ashley','professor');
insert into emp_det values('ketty','professor');
insert into emp_det values('jane','actor');
insert into emp_det values('jenny','doctor');
insert into emp_det values('priya','singer');
commit;


我想输出如下。

doctor   professor   singer   actor
jenny    ashley      meera    jane
samantha ketty       priya    julia
null     null        null     maria


请帮帮我。

专家解答

你需要做枢轴!

如果您想为每个有职业的人单独一行,请为该职业中的每个人分配一个数字。然后,Oracle数据库将按此数字隐式分组,将它们拆分为单独的行:

set null 
with rws as (
  select e.*, 
         row_number() over (partition by occupation order by name) rn 
  from   emp_det e
)
  select * from rws
  pivot ( 
    min(name) for occupation in ('doctor', 'actor', 'singer', 'professor')
  );

set null 
with rws as (
  select e.*, 
         row_number() over (partition by occupation order by name) rn 
  from   emp_det e
)
  select * from rws
  pivot ( 
    min(name) for occupation in ('doctor', 'actor', 'singer', 'professor')
  );


有关旋转的更多信息,请阅读:

https://blogs.oracle.com/sql/how-to-convert-rows-to-columns-and-back-again-with-sql-aka-pivot-and-unpivot
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论