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

  • 相关阅读:
    读《构建之法》阅读与思考
    软工沉浮沉沉沉沉沉沉…记事
    四则运算截图and代码
    2016012000郭慕然+散列函数的应用及其安全性
    结对作业之四则运算网页版
    阅读《构建执法》第四章及第十七章有感
    2016012000小学四则运算练习软件项目报告
    有关读《构建之法》的部分思考与疑问
    遇见·软件
    我的——今日学习内容
  • 原文地址:https://www.cnblogs.com/heyang78/p/15426309.html
Copyright © 2011-2022 走看看