精华内容
下载资源
问答
  • Oracle中 listagg() within group () select deviceid,count(1) as alarmcount,listagg( to_char(b.alarmdsp),';') within group (order by createtime desc) as alarminfo from biz_technics_opc_alarm a left join...

    Oracle中 listagg() within group ()

    select deviceid,count(1) as alarmcount,listagg( to_char(b.alarmdsp),';') within group (order by createtime desc) as alarminfo
    from biz_technics_opc_alarm a
    left join utils_alarm_define b on a.alarmid = b.alarmid
    where status = 1
    group by deviceid
    

    MySQL中 group_concat

    select deviceid,count(1) as alarmcount,group_concat(b.alarmdsp order by createtime desc  separator ';') as alarminfo
    from biz_technics_opc_alarm a
    left join utils_alarm_define b on a.alarmid = b.alarmid
    where status = 1
    group by deviceid
    

    执行mysql的效果如下:
    在这里插入图片描述
    由于有重复需要去重 加上 distinct 即可达到去重的效果
    separator为自定义分割符

    select deviceid,count(1) as alarmcount,group_concat( distinct b.alarmdsp   separator ';') as alarminfo
    from biz_technics_opc_alarm a
    left join utils_alarm_define b on a.alarmid = b.alarmid
    where status = 1
    group by deviceid
    

    在这里插入图片描述

    展开全文
  • oracle行转列
  • ORACLE行转列和列转行

    千次阅读 2018-11-23 17:44:24
    文章目录ORACLE行转列和列转行定义ORACLE-行转列-unpivot数据准备行转列使用ORACLE-列转行-pivot数据准备列转行使用 ORACLE行转列和列转行 定义 行转列:把一行多列数据转换成一列多行数据 列转行:把一列多行数据...

    ORACLE行转列和列转行

    定义

    • 行转列:把一行多列数据转换成一列多行数据
    • 列转行:把一列多行数据转换成一行多列数据

    ORACLE-行转列-unpivot

    数据准备

    -- 此表用于表示某人四个季度的收入:用于行转列测试
    create table t_test1(
      v_name varchar2(50),-- 姓名
      v_age number,-- 年龄
      q_1 number,-- 第一季度
      q_2 number,-- 第二季度
      q_3 number,-- 第三季度
      q_4 number -- 第四季度
    );
    
    -- 插入数据
    insert all 
    into t_test1
    values ('张三',23,2000,3000,4000,5000)
    into t_test1
    values ('李四',34,3000,4000,5000,6000)
    select 1 from dual;
    
    -- 提交数据
    commit;
    

    行转列使用

    -- 行转列-复杂表述
    select t.* from (-- 加个括号是为了表示括号里是个整体,便于理解
      (
        select 
          v_name,
          v_age,
          q_1,
          q_2,
          q_3,
          q_4
        from t_test1
      )
      unpivot (
        v_value -- 值列
        for v_q in(-- 类型列
          q_1 as '第一季度',-- 加默认值
          q_2 as '第二季度',-- 加默认值
          q_3 as '第三季度',-- 加默认值
          q_4-- 不加默认值
        )
      )
    ) t;
    
    -- 行转列-简单表述
    select * from t_test1
    unpivot (
      v_value -- 值列
      for v_q in(-- 类型列
        q_1 as '第一季度',-- 加默认值
        q_2 as '第二季度',-- 加默认值
        q_3 as '第三季度',-- 加默认值
        q_4-- 不加默认值
      )
    );
    

    ORACLE-列转行-pivot

    数据准备

    -- 此表用于表示某人四个季度的收入:用于列转行测试
    create table t_test2(
      v_name varchar2(50),-- 姓名
      v_age number,-- 年龄
      v_q varchar2(10),-- 季节类型列
      v_value number-- 值列
    );
    
    
    -- 插入数据
    insert all 
    into t_test2
    values ('张三',23,'第一季度',2000) 
    into t_test2
    values ('张三',23,'第二季度',3000) 
    into t_test2
    values ('张三',23,'第三季度',4000) 
    into t_test2
    values ('张三',23,'第四季度',5000) 
    into t_test2
    values ('李四',34,'第一季度',3000)
    into t_test2
    values ('李四',34,'第二季度',4000)
    into t_test2
    values ('李四',34,'第三季度',5000)
    into t_test2
    values ('李四',34,'第四季度',6000)
    select 1 from dual;
    
    -- 提交数据
    commit;
    

    列转行使用

    -- 列转行-复杂表述
    select t.* from(-- 加个括号是为了表示括号里是个整体,便于理解
      (
        select 
          v_name,v_age,-- 这两个字段用于分组,相当于group by,一般只取主键
          v_q,-- 这个字段用于区分列,用于生成不同列
          v_value -- 这个字段用于汇总统计
        from t_test2
      )
      pivot (
        sum(v_value)
        for v_q in (
          '第一季度' as 第一季度,
          '第二季度' q_2,
          '第三季度' as q_3,
          '第四季度'
        )
      )
    ) t;
    
    -- 列转行-简单表述
    select * from t_test2
    pivot(
      sum(v_value) as 后缀
      for v_q in (
        '第一季度' as 第一季度,
        '第二季度' q_2,
        '第三季度' as q_3,
        '第四季度'
      )
    );
    
    展开全文
  • oracle行转列_列转行

    2012-11-09 15:11:27
    oracle行转列_列转行,实例加解析,自己测试没问题。免费分享了~
  • Oracle行转列

    2011-08-31 14:41:39
    Oracle行转列
  • oracle动态行转列

    2013-09-13 08:47:34
    用存储过程写的动态行转列。简单易用,查询速度高效
  • Oracle行转列,列转行大全

    千次阅读 2019-08-24 21:15:50
    函数wm_concat(列名)介绍:该函数可以把值以","号分隔起来,并显示成一 准备测试数据: create table test(id number,name varchar2(20)); insert into test values(1,'a'); insert into test values(1,'b');...

    wm_concat函数

    函数wm_concat(列名)介绍:该函数可以把列值以","号分隔起来,并显示成一行

    准备测试数据:

    create table test(id number,name varchar2(20));  
      
    insert into test values(1,'a');  
    insert into test values(1,'b');  
    insert into test values(1,'c');  
    insert into test values(2,'d');  
    insert into test values(2,'e');
    

    效果1 : 行转列,默认逗号隔开

    select wm_concat(name) name from test;
    

    效果2: 把结果里的逗号替换成"|"

    select replace(wm_concat(name),',','|') from test;
    

    效果3: 按ID分组合并name

    select id,wm_concat(name) name from test group by id;
    

    懒人扩展用法

    案例: 我要写一个视图,类似"create or replace view as select 字段1,…字段50 from tablename" ,基表有50多个字段,要是靠手工写太麻烦了,有没有什么简便的方法? 当然有了,看我如果应用wm_concat来让这个需求变简单,假设我的APP_USER表中有(id,username,password,age)4个字段。查询结果如下

    /** 这里的表名默认区分大小写 */  
    select 'create or replace view as select '|| wm_concat(column_name) || ' from APP_USER' sqlStr   
    from user_tab_columns where table_name='APP_USER';
    

    Oracle 11g 行列互换 pivot 和 unpivot 说明

    pivot 列转行

    create table demo(id int,name varchar(20),nums int);  ---- 创建表  
    insert into demo values(1, '苹果', 1000);  
    insert into demo values(2, '苹果', 2000);  
    insert into demo values(3, '苹果', 4000);  
    insert into demo values(4, '橘子', 5000);  
    insert into demo values(5, '橘子', 3000);  
    insert into demo values(6, '葡萄', 3500);  
    insert into demo values(7, '芒果', 4200);  
    insert into demo values(8, '芒果', 5500);
    

    行转列查询

    select * from (select name, nums from demo) pivot (sum(nums) for name in ('苹果' 苹果, '橘子', '葡萄', '芒果'));
    

    注意: pivot(聚合函数 for 列名 in(类型)) ,其中 in(‘’) 中可以指定别名,in中还可以指定子查询,比如 select distinct code from customers

    当然也可以不使用pivot函数,等同于下列语句,只是代码比较长,容易理解

    ------ 多项子查询  
    select * fromselect sum(nums) 苹果 from demo where name='苹果',select sum(nums) 橘子 from demo where name='橘子',select sum(nums) 葡萄 from demo where name='葡萄',select sum(nums) 芒果 from demo where name='芒果';  
             
    ------  decode 函数利用  
    select sum(decode(name,'苹果',nums)) 苹果, sum(decode(name,'橘子',nums)) 橘子,   
           sum(decode(name,'葡萄',nums)) 葡萄, sum(decode(name,'芒果',nums)) 芒果 from demo
    

    unpivot 行转列

    案例:现在有一个水果表,记录了4个季度的销售数量,现在要将每种水果的每个季度的销售情况用多行数据展示。

    创建表和数据

    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 values(3,'香蕉',2500,3500,2200,2500);  
    insert into Fruit values(4,'葡萄',1500,2500,1200,3500);  
    select * from Fruit
    

    例子:

    select id , name, jidu, xiaoshou from Fruit unpivot (xiaoshou for jidu in (q1, q2, q3, q4) )
    
    展开全文
  • oracle 行转列

    2014-12-05 11:04:35
    oracle行转列
    //原数据表结构如下:
    产品名称    销售额  季度
    奶酪          50     第一季度
    奶酪          60     第二季度
    啤酒          50     第二季度
    啤酒          80     第四季度
     
    
    //想转换成如下格式:
    产品名称 第一季度销售额 第二季度销售额 第三季度销售额 第四季度销售额
    奶酪          50               60           0              0
    啤酒           0               50           0              80

    //第一种方法:
    oracle下可以用函数decode处理:
    
    select 产品名称,
    sum(decode(季度,'第一季度',销售额,0)) 第一季度销售额,
    sum(decode(季度,'第二季度',销售额,0)) 第二季度销售额,
    sum(decode(季度,'第三季度',销售额,0)) 第三季度销售额,
    sum(decode(季度,'第四季度',销售额,0)) 第四季度销售额,
    from 表名 
    group by 产品名称;

    //第二种方法 case when:
    select 产品名称,sum(case when 季度='第一季度' then 销售额 else 0 end) as 第一季度销售额,
    sum(case when 季度='第二季度' then 销售额 else 0 end) as 第二季度销售额,
    sum(case when 季度='第三季度' then 销售额 else 0 end) as 第三季度销售额,
    sum(case when 季度='第四季度' then 销售额 else 0 end) 第四季度销售额
    from 表名 group by 产品名称;

    展开全文
  • 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;每个...
  • select * from V_TEST_TEST_TEMP select * from (select NAME,NUMS from V_TEST_TEST_TEMP)pivot (max(NUMS) for NAME in ( 'a','b','c' )); select * from (select NAME,NUMS from V_TEST_TEST_TEMP)...
  • 主要介绍了Oracle实现转换成的方法,实例分析了Oracle创建及查询表的相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • ORACLE行转列

    2013-04-05 16:38:44
    许多情况下,由于程序需要将转为展示,如果使用ORACLE那么这个资源适合你。
  • Oracle动态行转列问题

    2016-01-11 09:43:58
    有什么好的动态行转列方法?(动态噢!) 看过pivot xml函数但结果是CLOB类型,Java读取没写出来, 请问decode函数能实现动态的行转列吗?
  • Oracle 行转列

    千次阅读 2021-09-08 18:18:00
    Oracle行转列 第一种方式 建多张表 #1.创建住院诊断表,按照日期分组,按照日期和患者id降序,生成RN字段。 CREATE TABLE PALAN.TZ_ZY_DIAG AS SELECT PATIENT_TYPE, DATE1, DIAG_NAME, PID , ROW_NUMBER() OVER ...
  • oracle中行转列函数

    万次阅读 2018-07-24 14:44:44
    最近项目需要进行行转列,经过上网查资料发现了wmsys.wm_concat和LISTAGG函数,在这分享给大家 wmsys.wm_concat是oracle 10g推出的,用来连接字符串,LISTAGG是oracle 11g推出的,它的作用和wmsys.w...
  • Oracle行转列、列转行的几种方法

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

    千次阅读 2015-03-10 15:06:06
    [一]、行转列   1.1、初始测试数据   表结构:TEST_TB_GRADE   create table TEST_TB_GRADE (  ID NUMBER(10) not null,  USER_NAME VARCHAR2(20 CHAR),  COURSE...
  • oracle行转列

    2011-12-22 16:48:38
    oracle数据库,利用sql语句实现行列转换。
  • Oracle 行转列pivot 列中存放多个值

    千次阅读 2017-08-10 09:42:13
    Oracle 行转列pivot 列中存放多个值
  • Oracle 实现行转列的几种方法表数据1 使用 decode 与聚合函数实现2 使用 case when 与聚合函数实现3 使用 pivot 函数 表数据 with students as ( select 99 score, 'chinese' course, 'zhangsan' name from dual ...
  • Oracle行转列之pivot

    2013-03-15 20:45:13
    oracle数据库最详细的行转列资料,是官方文档的详细介绍版,中文的
  • 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 行转列 动态出转换的列

    万次阅读 多人点赞 2018-10-02 13:03:23
    10月的第二天,前天写了个Oracle中行转列的pivot的基本使用方法,然后,因为pivot的用法,正常情况下,我们需要转出多少个列,都得在我们的sql完完整整地写出,而不能直接在里面写个查询来动态转换。然后,趁着...
  • 一 pivot函数表达式: 有一个职工部门工资表pivot_tmp,数据如下: 如果我们想要求各部门的工资和,很简单一...注意事项 在pivot的 in表达式里面的字段一定要用单引号,而unpivotin表达式里面的字段则不需要
  • Oracle 行转列和列转行

    万次阅读 2016-05-16 18:37:58
    在生成报表的时候,很多时候对某列取值固定或者有限的几个值时,进行转列分析。如下: facility列取值只有四种,每种一列,遇到相同facility求和。如下图: 实现方式 DECODE 利用DECODE函数、聚合函数SUM、GROUP ...
  • 目前很多行转列都使用了 oracle 11g新增的pivot ,但是我用达梦国产数据库不支持该函数,所以使用case when的方式 首先,我们需要构造一个两列的数据,也就是查询结果 select 'aaaaa' as flag ,'1' as num from ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 82,354
精华内容 32,941
关键字:

oracle中的行转列