精华内容
下载资源
问答
  • 关于oracle行转列函数

    千次阅读 2021-01-27 11:47:59
    关于oracle行转列函数LISTAGG()XMLAGG() LISTAGG() 例如: 查出每个职位的所有人名单: 但是如果遇到转为一行后的字段过于太长太长,会报错,如下: 这样只有使用另一种方法查出来转为行的结果类型转为clob ...

    关于oracle行转列函数

    LISTAGG()

    在这里插入图片描述

    例如:

    在这里插入图片描述
    查出每个职位的所有人名单:
    在这里插入图片描述


    但是如果遇到转为一行后的字段过于太长太长,会报错,如下:
    在这里插入图片描述

    在这里插入图片描述
    这样只有使用另一种方法查出来转为行的结果类型转为clob
    LISTAGG函数返回的是一个varchar2类型的数据,最大字节长度为4000
    XMLAGG函数返回的类型为CLOB,最大字节长度为32767


    XMLAGG()

    xmlagg函数

    例如:

    在这里插入图片描述
    查出每个职位的所有人名单:
    在这里插入图片描述
    点开clob每个字段内容看看:在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • oracle 行转列函数

    2018-12-28 17:11:37
    第一种方法,wmsys.wm_concat,oracle 10g推出的函数,用‘,’来链接字符串 写法:select pk,wmsys.wm.concat(columnA) from dual group by pk ------------------------------- 第二种写法,LISTAGG,是oracle11...

    一共三个方法(也可以自己手写自定义函数实现):

    第一种方法,wmsys.wm_concat,oracle 10g推出的函数,用‘,’来链接字符串

    写法:select pk,wmsys.wm.concat(columnA) from dual group by pk

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

    第二种写法,LISTAGG,是oracle11g推出的函数,同用‘,’来链接字符串

    写法:select pk,LISTAGG(columnA,',') withinGRO(order by columnA) from dual group by pk;

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

    但是以上这两种行转列方法都会有字段长度限制,超过4000字节就会报错,sql执行不下去

    网上浏览得知一种方法,可以使用XML函数来解决这个问题

    写法:

    select PK,XMLAGG(XMLELEMENT(E, COLUMNA || ',')).EXTRACT('//text()').getclobval() as COLUMNA from dual GROUP BY PK

    这种方法写出来的数据好像并不能直接浏览,只能通过点击进行弹框浏览,但是可以直接拿来使用

    展开全文
  • wm_concat()函数oracle中独有的...这两个函数的作用是相同的,它们的功能是:实现行转列功能,即将查询出的某一值使用逗号进行隔开拼接,成为一条数据。 如: shopping: u_id goods num 1 苹果 2 2 梨子 5 1 西瓜

    wm_concat()函数是oracle中独有的,mysql中有一个group_concat()函数。

    这两个函数的作用是相同的,它们的功能是:实现行转列功能,即将查询出的某一列值使用逗号进行隔开拼接,成为一条数据。

    例1

    shopping:


    u_id goods num


    1 苹果 2

    2 梨子 5

    1 西瓜 4

    3 葡萄 1

    3 香蕉 1

    1 橘子 3

    ====================

    想要的结果1:


    u_id goods_sum


    1 苹果,西瓜,橘子

    2 梨子

    3 葡萄,香蕉


    select u_id, wmsys.wm_concat(goods) goods_sum   from shopping   group by u_id  
    

    想要的结果2:


    u_id goods_sum


    1 苹果(2斤),西瓜(4斤),橘子(3斤)

    2 梨子(5斤)

    3 葡萄(1斤),香蕉(1斤)


    使用oracle wm_concat(column)函数实现:

    select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum   from shopping   group by u_id 
    

    例2
    在这里插入图片描述

    实现:

    SELECT p3.cl_id,wm_concat(stu_name)
    FROM
    (SELECT p1.cl_id,Replace(p1.stu_ids,p1.stu_ids,p2.stu_name) stu_name
    FROM pm_ci p1,pm_stu p2 
    ORDER BY p1.cl_id,p2.stu_id) p3
    GROUP BY p3.cl_id;
    
    展开全文
  • oracle行转列函数pivot

    千次阅读 2019-04-16 19:25:43
    什么情形下需要使用行转列 对于同一类的事物下具有多个属性(属性是有限的),比如说学生选课,每一名可以选择多个课程,而且课程的数量也是有限重复的(对于不通学生选同一门科就相当于是课程重复)。比如说下面这样的...

    什么情形下需要使用行转列

    对于同一类的事物下具有多个属性(属性是有限的),比如说学生选课,每一名可以选择多个课程,而且课程的数量也是有限重复的(对于不通学生选同一门科就相当于是课程重复)。比如说下面这样的数据:

    姓名班级性别课程分数
    张三一班高等数学96
    张三一班复变函数78
    张三一班英语78
    李四二班英语98
    李四二班复变函数78
    李四二班微积分73

    可以看到姓名这一列相当于是一个大类,其中包含的属性课程是有限重复的(不需要循环)虽然每个人选择的课程不一定完全相同但是课程总数是有限的。

    使用行转列的函数pivot查询后出现如下的结果:

    SELECT * FROM STUDENT  PIVOT(MIN(S_SCORE) FOR S_COURSE IN ('高等数学', '复变函数', '英语', '微积分')) 
    

    在这里插入图片描述
    下面讲解pivot的语法以及用法:

    pivot基本语法格式

    SELECT * FROM TABLE_NAME PIVOT(PIVOT_CLAUSE, PIVOT_FOR_CLAUSE, PIVOT_IN_CLAUSE); 
    

    语法解释

    • PIVOT_CLAUSE里面是聚合函数
    • PIVOT_FOR_CLAUSE: for子句,后面接的字段是我们想要将其转换为列的字段
    • PIVOT_IN_CLAUSE:in子句,代表的是对指定的列进行过滤,只会将指定的行转换成列(这里需要注意的是将指定的行转换成列的意思不是说将原来for后面的字段为in里面的内容的行距转换成列,
      实际上即使for后面的字段得值不在in子句里面,也是会被转换,只是转换的结果中不会存在这一列而已)

    测试数据

    在这里插入图片描述
    上面的测试数据中可以看到code也是重复的,可以将code转换成行显示,

    SELECT * FROM TEST_TABLE PIVOT((MIN(PLAN_DATE) FOR CODE IN('0001' AS CODE_ONE, '0002' AS CODE_TWO)); 
    

    可以得到如下结果:
    在这里插入图片描述
    将上面测试数据中的第二条数据的分类改为分类3,得到如下的测试数据:
    在这里插入图片描述
    然后使用同样的转换语句:

    SELECT * FROM TEST_TABLE PIVOT((MIN(PLAN_DATE) FOR CODE IN('0001' AS CODE_ONE, '0002' AS CODE_TWO)); 
    

    发现此时的结果有三条。
    在这里插入图片描述
    所以转换的结果行数也是有规律的,比如我们上面查询的时候使用的是*,也就是查询所有的列,这样的化去除PIVOT_CLAUSEPIVOT_FOR_CLAUSE两个字段,然后再将其余所有字段分组查询,上面的例子中就是:

    select id, name, price, category from test_table group by id, name, price, category;
    

    这样得到的结果行数就是使用pivot后的行数。

    查询的结果不仅仅是in子句里面的行数

    上面使用pivot查询的时候in子句里面是包含了for子句后面对应字段的所有值,比如code的值有0001以及0002,在in里面也就使用了0001和0002,当我们只是使用其中一个比如0002时:

    SELECT * FROM test_table PIVOT(MIN(plan_date) FOR CODE IN ('0002' AS CODE_ONE));
    

    得到的结果如下:
    在这里插入图片描述

    查询结果中是有三条结果的,但是原来的数据中code的值为0002的只有两条,所以这里不要被误导了,这里in里面只有code为0002的不是说原来的数据里面只有code=0002的才需要转换,实际上转换的还是所有的行,只是转换出来的列是少了一个的

    in子句不能使用子查询

    上面的in子句里面的内容是固定的,如果在in里面想要使用子查询比如下面的sql:

    SELECT * FROM test_table PIVOT(MIN(plan_date) FOR CODE IN (select distinct code from test_table));
    

    使用这种方式是会报错的。在网上搜索的时候看到可以使用存储过程来实现in子句里面使用动态查询,下次再写咯。

    展开全文
  • oracle行转列函数

    万次阅读 2016-12-05 18:03:39
    WMSYS.WM_CONCAT 函数的用法   select t.rank, t.Name from t_menu_item t;  10 CLARK  10 KING  10 MILLER  20 ADAMS  20 FORD  20 JONES  20 SCOTT  20 SMITH  30 ALLEN
  • Oracle 行转列函数

    千次阅读 2019-05-29 15:19:29
    pivot (sum(amount) for type in( '001' 截止上月设计申请金额 , '002' 截止上月现场申请金额 )); pivot(聚合函数 for 转列的字段 in (字段值 别名));
  • 行转列函数,对于学习sql查询的朋友们,可能会遇到这样的要求,此文档中做了详细记载,希望可以帮到你!
  • oracle行转列函数WMSYS.WM_CONCAT用法.pdf
  • Oracle行转列之pivot

    2013-03-15 20:45:13
    oracle数据库最详细的行转列资料,是官方文档的详细介绍版,中文的
  • Oracle 行转列 pivot函数基本用法

    万次阅读 多人点赞 2018-09-30 23:28:05
    2018年9月30日22点,眼看着就10月份了,回头看下,8月份就写了一...所以暂时先写个Oracle自带的行转列函数,pivot的基本用法。国庆几天看下有时间的话完善一下动态转列的做法,到时候再另写一篇附链接过来。 一、运...
  • oracle 行转列 转行函数理解

    千次阅读 2019-12-10 18:14:42
    1、pivot 行转列函数 含义:pivot 聚合函数(字段1) for 字段2 in (值1,值2,值3...) 将字段2中的值1,值2,值3...作为字段名称在对字段1根据聚合函数做聚合(SUM、max、min、avg等)。 例、原表为: 将这个表格...
  • Oracle函数篇 - pivot行转列函数

    千次阅读 2019-12-19 16:30:24
    SELECT 语句pivot_clause允许您编写交叉表位查询,将旋转到中,在旋转过程中聚合数据。透视是数据仓库中的一项关键技术。在其中,您将多行输入转换为数据仓库中更少且通常更宽的。透视时,将针对数据透视值...
  • 多行字符串 这个比较简单,用||或concat函数可以实现 ? 1 ... select concat(id,username) str from ... 字符串 实际上就是拆分字符串的问题,可以使用 substr、instr、regexp_substr函数方式 ...
  • oracle转行函数

    2018-04-18 09:34:59
    SELECT TRIM(',' FROM SYS.STRAGG(A_NAME||NVL2(A_NAME,',','')))as nams FROM A_TEMP
  • oracle中的行转列函数

    万次阅读 2018-07-24 14:44:44
    最近项目需要进行行转列,经过上网查资料发现了wmsys.wm_concat和LISTAGG函数,在这分享给大家 wmsys.wm_concat是oracle 10g推出的,用来连接字符串,LISTAGG是oracle 11g推出的,它的作用和wmsys.w...
  • NULL 博文链接:https://vernonchen163.iteye.com/blog/1902976
  • --行转列 select * from SalesList pivot( max(salesNum) for shangPin in ( --shangPin 即要转成的字段 '上衣' as 上衣, --max(salesNum) 此处必须为聚合函数, '裤子' as 裤子, --in () 对要转成的每一个...
  • oracle行转列转行

    万次阅读 多人点赞 2018-05-26 13:17:54
    行转列:PIVOT转行:UNPIVOT这两个是在oracle11g上面新增的函数。下面举例说明用法。PIVOT:学生成绩表,原数据:select class_name, student_name, course_type, result, created_date from class_tmp_2;每个...
  • HH 终风且暴,顾我则笑,谑浪笑敖,中心是悼。 终风且霾,惠然肯来,莫往莫来,悠悠我思。 博客园 首页 ...Oracle行转列转行的Sql语句总结 多行转字符串 这个比较简单,用||或concat函数...
  • ORACLE行转列函数

    2011-08-02 18:27:45
    一个好用的ORACLE行转列函数: select  wmsys.wm_concat(tt.USER_ID) str from  test tt WHERE TT.DEPT_ID=1
  • Oracle 行转列 动态出转换的

    万次阅读 多人点赞 2018-10-02 13:03:23
    10月的第二天,前天写了个Oracle中行转列的pivot的基本使用方法,然后,因为pivot的用法中,正常情况下,我们需要出多少个,都得在我们的sql中完完整整地写出,而不能直接在里面写个查询来动态转换。然后,趁着...
  • Oracle行转列转行的方法汇总

    千次阅读 2020-01-10 10:55:15
    行转列 方法一:Oracle中的Pivot函数 说明:pivot(聚合函数 for 列名 in(类型)),其中 in(‘’) 中可以指定别名,in中还可以指定子查询,比如 select distinct ranking from temp SELECT * FROM [StudentScores]...
  • 行转列: concat函数: select wmsys.wm_concat(column) from test group id; listagg函数: select listagg(name,',')within group(order by age)name from emp;   Clob行转列: 拼接起来以“,”分割: ...
  • 主要给大家介绍了关于SQL基础教程之行转列Pivot函数的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用SQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • Oracle SQL函数pivot、unpivot转置函数实现行转列转行
  • 记录一个在oracle中多行函数,有一个项目近期到了收尾阶段,忽然客户说有一个成本分摊的统计表逻辑要调整,我一看需求瞬间头大了,其中比较麻烦的一段逻辑就是需要把单行的多数据分割成多行,百度了一下...
  • oracle动态行转列

    2013-09-13 08:47:34
    用存储过程写的动态行转列。简单易用,查询速度高效
  • oracle数据库 行转列 用decode函数实现

    千次阅读 2017-08-17 13:36:58
    --用decode函数实现行列转换 SELECT NAME 姓名, SUM (DECODE (CLASS, '语文', score, 0)) 语文, SUM (DECODE (CLASS, '数学', score, 0)) 数学, SUM (DECODE (CLASS, '英语', score, 0)) 英语 FROM student ...
  • Oracle行转列转行的几种方法

    千次阅读 2019-11-08 15:58:46
    Oracle 11g之后,支持使用PIVOT实现行转列 函数说明: PIVOT(任意聚合函数 FOR 列名 IN(类型)) 其中,【聚合函数】聚合的字段,是需要转化为值的字段;【列名】是需要转化为标识的字段,【类型】即是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 130,298
精华内容 52,119
关键字:

oracle行转列函数