加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Oracle列转行、多列转成一行

(2013-08-02 15:53:10)
标签:

方法

成一行

教育

分类: 数据库

列转行实验:

create table score2(
    name varchar2(10),
    Language number(3),
    Math number(3),
    English number(3)
);

insert into score2 values('Zhang',80,67,95);
insert into score2 values('Li',79,84,62);
insert into score2(name,Language) values('Chen',88);
commit;


SELECT name, 'Language' subject,Language grade FROM score2
UNION ALL
SELECT name, 'Math' subject,Math grade FROM score2
UNION ALL
SELECT name, 'English' subject,English grade FROM score2
order by name;

多列转成一行 实验:
drop table t purge;
create table t(
 dname varchar2(10),
 ename varchar2(10)
);
insert into t values('sales','Scott');
insert into t values('sales','Jimes');
insert into t values('sales','Jack');
insert into t values('account','John');
insert into t values('account','Marry');
insert into t values('hr','Smith');
commit;

方法一:
select dname,WMSYS.WM_CONCAT(ename) ename from t group by dname;

方法二:
 SELECT dname, SUBSTR(MAX (SYS_CONNECT_BY_PATH (ename, ',')), 2) NAME
 FROM (
  SELECT dname, ename, rn, LEAD (rn) OVER (PARTITION BY dname ORDER BY rn) rn1
  FROM (SELECT dname, ename, ROW_NUMBER () OVER (ORDER BY ename) rn
   FROM t)
 )
 START WITH rn1 IS NULL
 CONNECT BY rn1 = PRIOR rn
 GROUP BY dname;

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有