• Oracle行专列的几种方法


    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;

  • 相关阅读:
    搭建企业级Docker Registry -- Harbor
    搭建私服-docker registry
    CentOS 7.2修改网卡名称
    tomcat错误日志监控脚本
    Openresty+Lua+Redis灰度发布
    Jenkins权限控制-Role Strategy Plugin插件使用
    Rsyslog日志服务搭建
    awk4.0对数组value排序
    Spring-IOC 在非 web 环境下优雅关闭容器
    Spring-IOC bean 生命周期之 Lifecycle 钩子
  • 原文地址:https://www.cnblogs.com/fengxiaoyuan/p/9982033.html
Copyright © 2020-2023  润新知