VM_CONCAT

vm_concat可以用来进行行转列,默认以逗号分隔,可通过vm_concat(name,’,’,’|’)修改为|1

2

3

4

5

6

7

8

9

10

11

12

13SQL> select * from test

id name

---- -----

1 a

2 b

1 c

2 d

SQL> select id,wm_concat(name) from test group by id

id name

---- ------

1 a,c

2 b,d

Oracle 12C之后该函数已经不再支持了

LISTAGG

LISTAGG是Oracle 11g中推出的函数,也可以用来做行转列

1

2

3

4

5

6

7

8

9

10

11

12

13SQL> select distinct DEPTNO,listagg(ENAME,';') WITHIN GROUP (order by ename) over (PARTITION BY DEPTNO) from SCOTT.EMP;

DEPTNOLISTAGG(ENAME,';')WITHINGROUP(ORDERBYENAME)

------- ---------------------------------------------

10 CLARK;KING;MILLER

20 ADAMS;FORD;JONES;SCOTT;SMITH

30 ALLEN;BLAKE;JAMES;MARTIN;TURNER;WARD

SQL> select distinct DEPTNO,listagg(ENAME,';') WITHIN GROUP (order by ename) from SCOTT.EMP group by DEPTNO;

DEPTNOLISTAGG(ENAME,';')WITHINGROUP(ORDERBYENAME)

------- ---------------------------------------------

10 CLARK;KING;MILLER

20 ADAMS;FORD;JONES;SCOTT;SMITH

30 ALLEN;BLAKE;JAMES;MARTIN;TURNER;WARD

19C才开始支持distinct去重

XMLAGG

XMLAGG是一个聚合函数,可以将数据聚集成XML格式数据。XMLAGGf返回的类型为clob,最大字节长度为32767,因此当行转列字符长度超出限制时可以采用改方式来避免该错误。

1

2

3

4

5

6

7

8

9

10

11

12

13SQL> select DEPTNO,XMLAGG(XMLELEMENT(CONTENT,ename||',') ORDER BY ename).EXTRACT('//text()').getclobval() as ename from scott.emp group by DEPTNO;

DEPTNOENAME

------- -------------------------------------

10 CLARK,KING,MILLER,

20 ADAMS,FORD,JONES,SCOTT,SMITH,

30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD,

SQL> select DEPTNO,xmlagg(xmlparse(content ENAME ||',' wellformed) order by ENAME).getclobval() as ename from SCOTT.EMP GROUP BY DEPTNO;

DEPTNOENAME

------- -------------------------------------

10 CLARK,KING,MILLER,

20 ADAMS,FORD,JONES,SCOTT,SMITH,

30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD,

PIVOT与UNPIVOT

Oracle 11g中又加入了两个函数:PIVOT和UNPIVOT,用于进行行专列和列转行,与SQL Server中同名函数功能一致

基础数据

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16SELECT job,deptno,SUM(sal) AS sum_sal

FROM emp

GROUP BY job,deptno

ORDER BY job,deptno;

JOB DEPTNO SUM_SAL

--------- ---------- ----------

ANALYST 20 6000

CLERK 10 1300

CLERK 20 1900

CLERK 30 950

MANAGER 10 2450

MANAGER 20 2975

MANAGER 30 2850

PRESIDENT 10 5000

SALESMAN 30 5600

行转列

1

2

3

4

5

6

7

8

9

10

11

12

13select *from (select sal,deptno,job from scott.emp)

pivot (

sum(sal)

for deptno in(10,20,30,40)

);

JOB 10 20 30 40

---------- ------ ---- ---- ----

ANALYST - 6000 - -

CLERK 1300 1900 950 -

SALESMAN - - 5600 -

MANAGER 2450 2975 2850 -

PRESIDENT 5000 - - -

UNPIVOT和PIVOT相反,用于进行列转行

oracle 的行列转换函数,Oracle行列转换函数相关推荐

  1. oracle非常量不能用于privot_Oracle 行列转换函数pivot、unpivot的使用(二)

    一.行转列pivot 关键函数pivot,其用法如下 pivot(聚合函数 for 列名 in(类型)) select * from table_name pivot(max(column_name) ...

  2. oracle listagg支持,PostgreSQL行列转换(兼容oracle listagg)

    oracle11g开始支持的listagg函数替代了wmconcat来实现行列转换的功能. listagg函数的用法: oracle行列转换例子: -建表https://www.cndba.cn/fo ...

  3. oracle 天转换成月函数_oracle 日期转换格式 函数

    1 oracle对时间格式的数据存贮 oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关,具体哪个字节表示什么,我不太清楚,请高手补充.存 ...

  4. mysql rollup函数_Mysql,Oracle使用rollup函数完成行列统计

    昨天突然在 一篇博客中看到了Mysql也有rollup函数,原博文使用了rollup进行行列统计,原博文链接如下: 本博文主要是记录下mysql和oracle使用rollup函数进行行列统计,内容比较 ...

  5. oracle中转换函数,Oracle中的转换函数

    Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...

  6. oracle中blob转换,BLOB转换为CLOB的函数(oracle中执行)

    BLOB转换为CLOB的函数(oracle中执行) CREATE OR REPLACE FUNCTION BlobToClob(blob_in IN BLOB) RETURN CLOB AS v_cl ...

  7. oracle日期转数值的函数,oracle数据库内置函数之数值函数、字符函数、日期函数、转换函数及其在查询语句中的运用...

    数值函数: 1.四舍五入函数round() from dual:一行一列组成 select round(23.4) from dual;--默认不写m表示m为0 select round(23.45, ...

  8. oracle 纵列 转 横列,oracle sql小结(主要讲横列转换的例子)decode 以及case

    --建表 create table kecheng ( id NUMBER, name VARCHAR2(20), course VARCHAR2(20), score NUMBER ); --插入数 ...

  9. 深度解析:Oracle数据库SYSDATE到PostgreSQL数据库最佳转换

    本文讨论了在Amazon RDS和Aurora 中使用PostgreSQL数据库时,与日期/时间相关的函数,并确定PostgreSQL数据库里的clock_timestamp()函数与Oracle中的 ...

最新文章

  1. 高分辨率、实时的手持物体360°三维模型重建结构光技术
  2. python 文件操作的模块_Python之文件操作修改模块
  3. Navicat数据库非常实用的技巧 (create_time、edit_time 设置默认值和自动更新)
  4. ./ 表示当前路径 ../ 表示上一级目录路径
  5. acer清理工具 clear下载_免流量工具聚合下载,包含全部工具
  6. RTT的内存管理篇——为什么要进行内存管理?
  7. JMH 性能测试框架
  8. 加速度传感器与车祸报警解决方案
  9. 朗沃20140414
  10. 【AtCoder】ARC065
  11. winform调用fastreport制作报表(三)绑定数据
  12. 小米5miui10android,小米8 Miui10.3 最新稳定版(10.3.5.0 9.0) 快过闪电 AI 人性化设置 冰箱 流畅 实用...
  13. CentOS 7.9命令行配置有线网卡
  14. led灯条串联图_LED灯如何串联?
  15. pod 文件管理服务器,k8s中pod的状态管理
  16. SpringBoot、SpringCloud版本中GA/PRE/SNAPSHOT的详解
  17. springboot 多任务并行执行
  18. 华南理工计算机电路基础试题,2017年华南理工大学计算机电路基础.doc
  19. 等保2.0 Windows主机测评过程
  20. UI的四个实用配色网站

热门文章

  1. 一篇文章帮你搞懂「估值」
  2. nodejs SPAWN出现乱码
  3. Cocos2dx中Scrollview控件滑动与其子控件监听冲突的解决方案(不改底层、最优)
  4. 数字IC验证:ARM协议之AMBA低功耗接口Q-channel
  5. 我用血和泪的教训,再次告诉你:不要接私活
  6. P02014186陈镐镐
  7. 好看的壁纸在哪?在这两个网站
  8. 非常好用的颜色吸取器PicPick
  9. 公有云和私有云的主要区别在哪里
  10. 洛谷——P1348 Couple number