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

Oracle分组拼接

(2017-03-12 11:37:13)
标签:

it

分类: 数据库

实现方法一: 用分析函数row_number() over进行分组然后用sys_connect_by_path进行拼接:

select max(substr(sys_connect_by_path(ename, ','),2)) name,deptno
  from (select ename, deptno, row_number() over(partition by deptno order by ename) ro
          from (select deptno,ename from emp where deptno is not null)
      ) newtab
start with newtab.ro = 1
connect by prior newtab.ro = newtab.ro - 1
group by deptno;

 

select max(substr(sys_connect_by_path(ename, ','),2)) name,deptno
  from (select ename, deptno, row_number() over(partition by deptno order by ename) ro
          from (select deptno,ename from emp where deptno is not null)
      ) newtab
start with newtab.ro = 1
connect by newtab.ro=rownum

group by deptno;

 

实现方法二:用函数wm_concat(列名),该函数可以把列值以逗号分隔,并显示成一行:

select deptno,wm_concat(ename) n from emp where deptno is not null group by deptno;

 

实现方法三:用函数listagg(列名,分隔符),为oracle11gr2版本新出函数,可实现组内排序,并自定义分隔符号:

select deptno,listagg(ename,',') n group (order by ename) from emp where deptno is not null group by deptno;

 

 

 

0

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

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

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

新浪公司 版权所有