zoukankan      html  css  js  c++  java
  • 【Oracle】行转列

    defects表结构:

    create table defects(
        id number(4),
        code varchar2(6),
        type varchar2(10) check(type='oper' or type='sql' or type='api'),
        status number(1) check(status=0 or status=1),
        remark nvarchar2(100),
        primary key(id)
    )

    插值:

    declare 
       d integer;
       status integer;
    begin
    for i in 1..1000 loop
        d:=dbms_random.value(1,3);
        status:=dbms_random.value(0,1);
    
        insert into defects values(i,
                                   dbms_random.string('*',6),
                                   decode(d,1,'oper',2,'sql',3,'api'),
                                   status,
                       '');
    end loop;
    
    commit;
    
    end;
    /

    // 正常查询

    select 
        type,
        count(*) as total,
        sum(decode(status,1,1,0,0)) as completed,
        sum(decode(status,1,0,0,1)) as awiating
    from defects
    group by type

    效果:

    SQL> select
      2      type,
      3      count(*) as total,
      4      sum(decode(status,1,1,0,0)) as completed,
      5      sum(decode(status,1,0,0,1)) as awiating
      6  from defects
      7  group by type;
    
    TYPE                      TOTAL  COMPLETED   AWIATING
    -------------------- ---------- ---------- ----------
    api                         253        126        127
    sql                         511        248        263
    oper                        236        112        124

    行转列:

    语句:

    select
        'total' as class,
        sum(case type when 'oper' then 1 end) as oper,
        sum(case type when 'sql' then 1 end) as sql,
        sum(case type when 'api' then 1 end) as api
    from defects
    union all
    select
        'completed' as class,
        sum(case type when 'oper' then status end) as oper,
        sum(case type when 'sql' then status end) as sql,
        sum(case type when 'api' then status end) as api
    from defects
    union all
    select
        'awiating' as class,
        sum(case type when 'oper' then decode(status,1,0,0,1) end) as oper,
        sum(case type when 'sql' then decode(status,1,0,0,1) end) as sql,
        sum(case type when 'api' then decode(status,1,0,0,1) end) as api
    from defects

    效果:

    SQL> select
      2      'total' as class,
      3      sum(case type when 'oper' then 1 end) as oper,
      4      sum(case type when 'sql' then 1 end) as sql,
      5      sum(case type when 'api' then 1 end) as api
      6  from defects
      7  union all
      8  select
      9      'completed' as class,
     10      sum(case type when 'oper' then status end) as oper,
     11      sum(case type when 'sql' then status end) as sql,
     12      sum(case type when 'api' then status end) as api
     13  from defects
     14  union all
     15  select
     16      'awiating' as class,
     17      sum(case type when 'oper' then decode(status,1,0,0,1) end) as oper,
     18      sum(case type when 'sql' then decode(status,1,0,0,1) end) as sql,
     19      sum(case type when 'api' then decode(status,1,0,0,1) end) as api
     20  from defects;
    
    CLASS                    OPER        SQL        API
    ------------------ ---------- ---------- ----------
    total                     236        511        253
    completed                 112        248        126
    awiating                  124        263        127

    END

  • 相关阅读:
    gdb 调试(查看运行时数据)(五)
    Kendo UI开发教程(23): 单页面应用(一)概述
    Kendo UI开发教程(24): 单页面应用(二) Router 类
    Kendo UI开发教程(26): 单页面应用(四) Layout
    Kendo UI开发教程(25): 单页面应用(三) View
    Kendo UI开发教程(27): 移动应用开发简介
    [置顶] Kendo UI开发教程: Kendo UI 示例及总结
    web端、android端的文件上传
    [置顶] 关于本博客 http://www.imobilebbs.com
    hdu4707 Pet
  • 原文地址:https://www.cnblogs.com/heyang78/p/15426309.html
Copyright © 2011-2022 走看看