Oracle 简单的列转行】的更多相关文章

需求是,统计每一个部门不同工种的薪水总和. SQL> select deptno,ename,job,sal from emp;     DEPTNO ENAME      JOB              SAL ---------- ---------- --------- ----------         20 SMITH      CLERK            800         30 ALLEN      SALESMAN        1600         30 WA…
1. Oracle自带列转行函数listagg: 实例: with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Shanghai' city from dual union all select 'China' nation ,'Beijing' city from dual union all select 'USA' nation ,'New York…
文章目录 Oracle中的列转行实现字段拼接 场景 在SQL使用过程中经常有这种需求:将某列字段拼接成in('XX','XX','XX','XX','XX','XX' ...)做为查询条件. 实现 select 'in ('''||replace(wm_concat(EMPNO),',',''',''')||''')' from EMP 总结 两端字符的拼接 这里用'in ('''和''')'分别实现了in ('和')的前后拼接,以''')'为例,其中第一个第四个'是Oracle中的字符串连接符…
数据如下:name id张三 1,2,3 要求实现:name id张三 1张三 2张三 3 --创建临时表 create table tmp as(select '张三' name, '1,2,3' id from dual); --写法1 ,level) as id from tmp connect order by id --写法2: ,level)) as id from tmp connect by name = prior name and prior dbms_random.valu…
接触到了一个开发需求.其中是要把NC单据表体行的字段拼成一个字符串.例如: id name work age 1 王一 搬运工 20 2 李二 清洁工 21 3 张三 洗脚工 22 出现结果字符串为:name:王一,李二,张三 语句+效果:…
(1)select mark, wm_concat(status) from DISSENT_INFO t GROUP BY mark; 查出来的数据 mark     status 222        1007,1006333        1008,1008444        1008 (2) SQL> select deptno,listagg(ename,',')within group(order by sal)name from emp group by deptno; DEPT…
多行转字符串 这个比较简单,用||或concat函数可以实现  SQL Code  12    select concat(id,username) str from app_userselect id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名…
多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_userselect id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以",&quo…
最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle  列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max(date_201501) as date_201501,max(date_201502),max(date_201503),max(date_201504) from (select t.user_name,case when t.acct_date = '201501' then t.flow…
多行转字符串 这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以",&qu…
转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9977591.html 九月份复习,十月份考试,十月底一直没法收心,赶在十一初 由于不可抗拒的原因又不得不重新找工作就:欸~, 又是一番折腾,从入职到现在,可又没法闲下来了... 这次就简单介绍下oracle数据库下如何实现行转列.列转行及此在mybatis中的实现方式,就具体用法我就不详细说了,主要介绍下实战中所碰到的坑~ 行转列大致的实现方式大致有三种 使用条件判断(case when...)+聚合函数方…
这个比较简单,用||或concat函数可以实现 select concat(id,username) str from app_user select id||username str from app_user 字符串转多列 实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式 字符串转多行 使用union all函数等方式 wm_concat函数 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起…
原文地址:http://blog.csdn.net/seandba/article/details/72730657 函数PIVOT.UNPIVOT转置函数实现行转列.列转行,效果如下图所示: 1.PIVOT为行转列,从图示的左边到右边 2.UNPIVOT为列转行,从图示的右边到左边 3.左边为纵表,结构简单,易扩展 4.右边为横表,展示清晰,方便查询 5.很多时候业务表为纵表,但是统计分析需要的结果如右边的横表,这时候就需要用到转置函数了 示例图表: Pivot语法: SELECT ....…
多行转字符串这个比较简单,用||或concat函数可以实现 SQL Code select concat(id,username) str from app_userselect id||username str from app_user字符串转多列实际上就是拆分字符串的问题,可以使用 substr.instr.regexp_substr函数方式字符串转多行使用union all函数等方式wm_concat函数首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以",&q…
简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER); INSERT INTO tbl_test VALUES('A','A1',1); INSERT INTO tbl_test VALUES('A','A1',2); INSERT INTO tbl_test VALUES('B','B1',3); INSERT INTO tbl_test VALU…
工作中,我们经常会碰到行转列的情况 这里我介绍几种简单的方法--行转列 1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ,'成都市' city,'第一' ranking from dual union all select '四川省' nation ,'绵阳市' city,'第二' ranking from dual union all select '四川省' nation ,'德阳市' city,'第三' ran…
行转列 这是一个Oracle的列转行函数:LISTAGG() 先看示例代码: with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Shanghai' city from dual union all select 'China' nation ,'Beijing' city from dual union all select 'USA' nation …
一.业务场景 今天需要实现一个table,有一列的效果是:用户姓名A(账号a),用户姓名B(账号b)...这种格式.这就想到oracle的列转行函数vm_concat. 可以用类似这种格式wm_concat(a || '(' || b || ')'),a表示用户名字段,b表示账号字段. 例子: <select id="listAllocatedHandlerInfo" resultType="AllocationHandlerInfoVo"> selec…
业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不是特别好.这个函数在Oracle12是没有的,在Oracle11是不太兼容的,Oracle10可以正常使用.最近遇到这个问题,网上博客很多都写到了自定义列转行函数的办法去解决.但是这种办法并不一定适用所有的业务场景.我并没有采用.不过有些场景还是可以使用的. 网上优秀例子 下面是网络记录比较详细的例…
--Oracle列转行函数LISTAGG() with tb_temp as( select 'China' 国家,'Wuhan' 城市 from dual union all select 'China' 国家,'Dongjing' 城市 from dual union all select 'China' 国家,'Xijing' 城市 from dual union all select 'Germany' 国家,'Berlin' 城市 from dual union all select…
unpivot()函数需要Oracle版本大于等于11g --创建表 create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int); --插入数据 insert into Fruit values(1,'苹果',1000,2000,3300,5000); insert into Fruit values(2,'橘子',3000,3000,3200,1500); insert into Fruit value…
1.oracle的pivot函数 原表 使用pivot函数: with temp as(select '四川省' nation ,'成都市' city,'第一' ranking from dual union all select '四川省' nation ,'绵阳市' city,'第二' ranking from dual union all select '四川省' nation ,'德阳市' city,'第三' ranking from dual union all select '四川省…
首先pivot是一个列转行的函数,反向用是unpivot(行转列). 在SQL sever中可以这么写 SELECT * FROM [TABLE] /*数据源*/ AS A PIVOT ( MAX/*聚合函数*/(COL1/*行转列后 列的值*/) FOR A.COL2/*需要行转列的列*/ IN ([VALUE1],[VALUE2],[VALUE3].../*列的值*/) ) AS B 在Oracle中可以这么写 select * from tab pivot(max /*聚合函数*/ (co…
在 Oracle 领域,我相信一说到列转行大部分人都会立马想到 WM_CONCAT 函数,我觉得主要是因为该函数比较实用.但事实上 WM_CONCAT 并非官方公开函数,使用会存在一定的风险:函数返回值的格式比较单一(只能用逗号分割):返回值的长度也限制. 在<.Net程序员学用Oracle系列(20):层次查询(CONNECT BY)>一文中,详细讲解了 WM_CONCAT 函数的用法.如果不用 WM_CONCAT 函数又该如何实现列转行呢?当数据类别比较少的时候,通过 CASE 判断或 U…
Oracle行转列 参数动态传入iBatis使用示例 最近做了一个需求,需要获取工作流数据的各个节点的渠道数量信息,各渠道的费用信息~ 之前的需求是只需要获取渠道数据,所以做了渠道兼容,每个渠道数量的获取都是先case when 处理,然后再sum统计的 方案一:手动汇总数据为列数据(先case when 计算再sum统计) 例如:   #统计渠道数据量:渠道代码相同时,渠道数据计数1,不同时计数0 select taskname , case when t.CHANNEL_CODE = #ch…
行转列:源表: 方法1:case when select y,sum(case when q=1 then amt end) q1,sum(case when q=2 then amt end) q2,sum(case when q=3 then amt end) q3,sum(case when q=4 then amt end) q4from test04 group by y; 效果: 方法2:decade(decode(字段,v1(字段值或运算后的值),retu1(字段值或运算后的值与v…
一.行转列 在有些应用场景中,如学生成绩.学生所有科目的成绩都保存到一张表里面,当我们需要以列表的形式显示出学生所对应的每一科目的成绩的时候,需要使用到行转列. 示例 -- 学生成绩表 create table grade ( id ) not null, name ) not null, course ) not null, score ) not null, primary key (id) ) -- 初始化数据 ); ); ); ); ); ); ); ); ); ); ); ); );…
一.行转列1.1.初始测试数据表结构:TEST_TB_GRADESql代码:1    create table TEST_TB_GRADE2    (3      ID        NUMBER(10) not null,4      USER_NAME VARCHAR2(20 CHAR),5      COURSE    VARCHAR2(20 CHAR),6      SCORE     FLOAT7    ) 初始数据如下图: 1.2. 如果需要实现如下的查询效果图: 这就是最常见的行转…
SQL代码 列转行 select REGEXP_SUBSTR(a.rolecode ,,l) rolecode from ( select 'a,aa,aaa' rolecode from dual ) a, () b 或者 with a as (select 'ABC,AA,AD,ABD,JI,CC,ALSKD,ALDKDJ' id from dual) ,rownum) id from a connect by rownum <= length(regexp_replace(id,'[^,]…
一.行转列 需要将如下格式 转换为: 这就是最常见的行转列,主要原理是利用decode函数.聚集函数(sum),结合group by分组实现的 create table test( id varchar2(255) primary key not null, name varchar2(255), course varchar2(255), score varchar2(255) ); insert into test values(sys_guid(),'zhangsan','语文',85);…