精华内容
下载资源
问答
  • oracle行转列

    2019-03-27 05:26:30
    NULL 博文链接:https://13966692733-163-com.iteye.com/blog/1192434
  • 1.创建表t_result create table t_result (d varchar2(10),result varchar2(4)); 2.往表中插入数据 insert into t_result values ('2014-01-01','胜');...insert into t_result values ('2014-01-01','胜');...

    1.创建表t_result

    create table t_result

    (d varchar2(10),result varchar2(4));

    2.往表中插入数据

    insert into t_result values ('2014-01-01','胜');

    insert into t_result values ('2014-01-01','胜');

    insert into t_result values ('2014-01-01','负');

    insert into t_result values ('2014-01-02','胜');

    insert into t_result values ('2014-01-02','负');

    insert into t_result values ('2014-01-02','负');

     

    select * from t_result;

    解决办法一:

    select t1.d,t1.c1 胜,t2.c2 负 from

    (select count(result) c1,d from t_result where result = '胜' group by d) t1

    LEFT outer join

    (select count(result) c2,d from t_result where result = '负' group by d) t2

    on t1.d = t2.d;

    解决办法二:-----推荐方法

    select * from t_result pivot (count(result) for result in('胜','负'))

    解决办法三:

    SELECT d,SUM(decode(result,'胜',1,0)),SUM(decode(result,'负',1,0))

    FROM t_result

    GROUP BY d

    解决办法四:

    select d,

    sum(case result when '胜' then 1 else 0 end )胜,

    sum(case result when '负' then 1 else 0 end )负

    from t_result group by d order by d;

    取自:https://www.cnblogs.com/markfeifei/p/4009343.html

    自己做过测试,然后外加一种方法

     

    例子二:

    CREATE TABLE studentScores
    (
    userName varchar(20),
    subject varchar(30),
    score FLOAT
    );
    INSERT INTO studentScores(username,subject,score) values( '张三', '语文', 80);
    INSERT INTO studentScores values ('张三', '数学', 90);
    INSERT INTO studentScores values ('张三', '英语', 70);
    INSERT INTO studentScores values ('张三', '生物', 85);
    INSERT INTO studentScores values ('李四', '语文', 80);
    INSERT INTO studentScores values ('李四', '数学', 92);
    INSERT INTO studentScores values ('李四', '英语', 76);
    INSERT INTO studentScores values ('李四', '生物', 88);
    INSERT INTO studentScores values ('码农', '语文', 60);
    INSERT INTO studentScores values ('码农', '数学', 82);
    INSERT INTO studentScores values ('码农', '英语', 96);
    INSERT INTO studentScores values ('码农', '生物', 78);
    select * from studentScores;

    select username,WM_CONCAT(score),SUM(SCORE) from studentScores group by username;

    解决办法一:

    SELECT KIN.*,
    KIN.a+KIN.b AS TOTAL
    FROM
    (SELECT *
    FROM studentScores PIVOT (sum(SCORE) FOR subject IN ('语文' AS A , '数学' AS B) )
    ) KIN;

    解决办法二:
    SELECT
    username,
    MAX(DECODE(subject, '语文', SCORE)) A,
    MAX(DECODE(subject, '数学', SCORE)) B,
    MAX(DECODE(subject, '英语', SCORE)) C,
    MAX(DECODE(subject, '生物', SCORE)) D,
    SUM(SCORE) TOTAL
    FROM
    studentScores
    GROUP BY
    username;

    转载于:https://www.cnblogs.com/fengxiaoyuan/p/9982033.html

    展开全文
  • NULL 博文链接:https://vernonchen163.iteye.com/blog/1902976
  • tabe1 科目 等级 语文 优良 语文 及格 语文 及格 数学 优良 数学 优良 -------------------- 科目 优良 及格 语文 1 2 数学 2 0 oarcle如何将表一转化成表二的形式。
  • oracle行专列方法

    2019-12-04 10:53:09
    SELECT MC, NVL(pdjsl, 0) pdjsl, NVL(tpsl, 0) tpsl FROM (SELECT T.MC, T.sblx_dm, T.YWL FROM (SELECT c.dt_mc MC, b.sblx_dm, count(a.sbbm) YWL FROM dt_sbjbxx A, dm_sblx B, d...

    SELECT MC, NVL(pdjsl, 0) pdjsl, NVL(tpsl, 0) tpsl
      FROM (SELECT T.MC, T.sblx_dm, T.YWL
              FROM (SELECT c.dt_mc MC, b.sblx_dm, count(a.sbbm) YWL
                      FROM dt_sbjbxx A, dm_sblx B, dt_jbxx c
                     WHERE a.sblx_dm = B.sblx_dm
                       and a.dtjgdm = c.dt_dm
                     group by c.dt_mc, b.sblx_dm) T) PIVOT(SUM(YWL) FOR sblx_dm IN('05'
                                                                                   pdjsl,
                                                                                   '01' tpsl))
     

    展开全文
  • ORACLE 转列

    2020-11-17 17:52:42
    最近遇到转列的问题需要将同一个id下面的数据组装起来 与另一张主表中的数据组成一一条数据 sql代码如下 SELECT * FROM SE_REQ_ITEM_INFO srii LEFT JOIN ( SELECT ENTITY_ID, CASE WHEN attr_id = '...

    最近遇到行转列的问题需要将同一个id下面的数据组装起来

    与另一张主表中的数据组成一一条数据

    sql代码如下

    
    SELECT * FROM SE_REQ_ITEM_INFO srii 
    LEFT JOIN ( SELECT ENTITY_ID, 
    CASE WHEN attr_id = '201' THEN value END "201", 
    CASE WHEN attr_id = 202 THEN value END "202",
    CASE WHEN attr_id = 203 THEN value END "203"
    FROM SE_REQ_ITEM_VALUE) ITEM_VALUE ON srii.ID = ITEM_VALUE.ENTITY_ID 

    行专列之后表达式中注意的点  

    可以看到值像一个稀疏矩阵一样,因此行专列还需要进行groupby操作 正确sql如下:

    SELECT * FROM SE_REQ_ITEM_INFO srii LEFT JOIN (
       SELECT ENTITY_ID, max(CASE 
      WHEN attr_id = '201' THEN value
      ELSE ''
     END) 201, max(CASE 
      WHEN attr_id = 202 THEN value
      ELSE ''
     END) 摘要
     , max(CASE 
      WHEN attr_id = 203 THEN value
      ELSE ''
     END) 字数
    FROM SE_REQ_ITEM_VALUE
    GROUP BY ENTITY_ID) ITEM_VALUE ON srii.ID = ITEM_VALUE.ENTITY_ID

    注意 groupby后面跟的是需要合并出来的id(共同的id)

    展开全文
  • 普通的实现转列方式比较复杂, wm_concat 函数只适合用来合并字符型单元格的内容.应当用 pivot 函数来实现(转自我自己的博客园)

    首先,做准备工作

    建表:

    -- Create table
    create table DEMO
    (
      n_iden       NUMBER,
      c_order_code NVARCHAR2(50),
      c_order_name NVARCHAR2(50),
      c_friut      NVARCHAR2(50),
      c_amount     NUMBER(20,4),
      d_build      DATE,
      c_buyer      NVARCHAR2(50),
      c_seller     NVARCHAR2(50)
    )
    tablespace MYORCL1
      pctfree 10
      initrans 1
      maxtrans 255
      storage
      (
        initial 64K
        next 1M
        minextents 1
        maxextents unlimited
      );
    -- Add comments to the columns 
    comment on column DEMO.n_iden
      is 'ID';
    comment on column DEMO.c_order_code
      is '订单号';
    comment on column DEMO.c_order_name
      is '订单名称';
    comment on column DEMO.c_friut
      is '水果类型';
    comment on column DEMO.c_amount
      is '水果数量';
    comment on column DEMO.d_build
      is '创建日期';
    comment on column DEMO.c_buyer
      is '订货人';
    comment on column DEMO.c_seller
      is '买货人';
    插入数据:

    insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
    values (1, 'order_num1', '第一单', '苹果', 1.0000, to_date('11-01-2017', 'dd-mm-yyyy'), null, null);
    
    insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
    values (2, 'order_num1', '第一单', '橘子', 2.0000, to_date('11-01-2017', 'dd-mm-yyyy'), null, null);
    
    insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
    values (3, 'order_num1', '第一单', '香蕉', 3.0000, to_date('11-01-2017', 'dd-mm-yyyy'), null, null);
    
    insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
    values (4, 'order_num2', '第二单', '苹果', 4.0000, to_date('10-01-2017', 'dd-mm-yyyy'), null, null);
    
    insert into DEMO (N_IDEN, C_ORDER_CODE, C_ORDER_NAME, C_FRIUT, C_AMOUNT, D_BUILD, C_BUYER, C_SELLER)
    values (5, 'order_num2', '第二单', '橘子', 5.0000, to_date('10-01-2017', 'dd-mm-yyyy'), null, null);

    如果我们要实现以订单名称和订单代码为一个单位的数据时


    order_code order_name 苹果 橘子 香蕉

    order_num1 第一单 1 2 3
    order_num2 第二单 4 5 0

    普通的实现方式比较复杂,并且当苹果种类较多的时候会变得极其不适用

    普通方法的代码如下

    select c_order_code ,c_order_name,sum(decode(c_friut,'苹果',c_amount,0)) 苹果, sum(decode(c_friut,'橘子',c_amount,0)) 橘子, sum(decode(c_friut,'香蕉',c_amount,0)) 香蕉 from DEMO group by c_order_code ,c_order_name

    用 PIVOT 函数如下

    select * from (
    (select c_order_code,c_order_name,c_friut,C_AMOUNT from demo) pivot( sum(C_AMOUNT)for c_friut in ('苹果','橘子','香蕉') )
    )

    翻译:pivot :轴,中心

    sum() :单聚合函数

    for:对于,关于

    c_friut : 转换为行的字段

    in('苹果','橘子','香蕉') : 以三种水果为分组

    上述两种的查询结果为:



    还有一种行专列的形式,是用 wm_concat函数

     select c_order_code,c_order_name, to_char(wm_concat(c_friut)) from demo group by c_order_code,c_order_name;

    order_num1  第一单 橘子,苹果,香蕉

    通常是配合替换函数使用:

    因为作者水平有限,难免有疏漏之处.望读者不吝批评指正!


    展开全文
  • Oracle行转列、列转行的几种方法

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

    2017-09-15 14:43:44
    create table scoreTable(name varchar2(20),score varchar2(20)); insert into scoreTable values('a','50'); insert into scoreTable values('a','60'); insert into scoreTable values('a','80');...
  • oracle 转列

    2017-07-13 17:03:47
    select * from (select tablespace_name, table_name, num_rows from dba_tables) pivot (sum(num_rows) for table_name in ('MB_JSBSF' as MB_JSBSF, 'MB_JSBSFYY' MB_JSBSFYY, 'MB_JSBSFYY_BAK' MB_JSBSFYY_BAK, '
  • Oracle行专列函数Listagg()   这是一个Oracle转列函数:LISTAGG()  www.2cto.com   先看示例代码: Sql代码 with temp as(  select 'China' nation ,'Guangzhou' city from dual ...
  • 关于oracle行转列函数

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

    2019-03-14 10:33:19
    Oracle行转列、列转行的Sql语句总结 多行转字符串 这个比较简单,用||或concat函数可以实现 SQL Code select concat(id,username) str from app_user select id||username str from app_user 字符串转多列 ...
  • ORACLE行专列转换

    千次阅读 2013-03-28 19:43:58
    一、采用SQL decode和PL/SQL函数实现 1、固定列数的行列转换 如 student subject grade --------------------------- student1 语文 80 student1 数学 70 student1 英语 60 student2 语文 90 ...
  • oracle wm_concat函数,用于列转行,逗号分隔本文将详细介绍此功能的应用
  • 文章目录pivot:转列unpivot:列转行 pivot:转列 测试语句: WITH t_test AS( SELECT '1' ID, '张三' NAME, '70' score, 'CHINESE' subject FROM dual UNION ALL SELECT '1' ID, '张三' NAME, '90' score, '...
  • Oracle行转列详解

    万次阅读 2019-07-05 17:16:00
    一、建表与插入数据 1.1、建表 create table kecheng (   id     NUMB...
  • Oracle 转列函数

    2018-12-25 19:40:00
    select E.EXPERT_ID_, E.COM_NAME_, E.EMP_NAME_, E.STATUS_, ER.PARENT_PRO_CODE_, wm_concat(ER.PRO_CODE_) as PRO_CODE_ from MP_EXPERT E left outer join MP_EXPERT_RELATION ER on ER.EXPERT_ID_ = E.EXPERT_I...
  • Oracle 转列练习

    2020-08-28 15:30:45
    行专列 select rq, count(decode(shengfu, '胜', 1)) 胜, count(decode(shengfu, '负', 2)) 负 from tmp group by rq; 3.create table STUDENT_SCORE ( name VARCHAR2(20), subject VARCHAR2(20), score NUMBER(4,1...
  • oracle聚合+转列查询

    2021-01-13 20:56:42
    select t1.* from V_Forp_User t1 where t1.state= ‘1’ and t1.FK_DomainID= 1 and ( t1.id in ( SELECT REGEXP_SUBSTR(a.id, ‘[^,]+’, 1, rownum) as f_value_066 from (select to_char(wm_concat(to_char(pb....
  • 001-Oracle行转列

    2019-11-04 13:41:32
    Oracle行转列 需求: 需要获取8月和9月调用接口次数 名称 8月 9月 合计 实现方案1: select trx_type as "名称", AUG as "8月", SEPT as "9月", SUMS as "合计" from ( select trx...
  • oracle中的转列函数

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

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 313
精华内容 125
关键字:

oracle行专列