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

    两种简单的行列转置


    1、固定列数的行列转换

    student   subject    grade
    --------- ---------- --------
    student1  语文       80
    student1  数学       70
    student1  英语       60
    student2  语文       90
    student2  数学       80
    student2  英语       100
    ……
    转换为
              语文      数学      英语
    student1  80        70        60
    student2  90        80        100
    ……
    语句如下:
    select student, 
           sum(decode(subject,'语文', grade,null)) "语文",
           sum(decode(subject,'数学', grade,null)) "数学",
           sum(decode(subject,'英语', grade,null)) "英语"
    from table
    group by student;

    2、不定列行列转换

    c1  c2
    --- -----------
    1   我
    1   是
    1   谁
    2   知
    2   道
    3   不
    ……
    转换为
    1 我是谁
    2 知道
    3 不

    这一类型的转换必须借助于PL/SQL来完成,这里给一个例子

    CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
        RETURN VARCHAR2
    IS
        Col_c2 VARCHAR2(4000);
    BEGIN
        FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP
            Col_c2 := Col_c2||cur.c2;
        END LOOP;
        Col_c2 := rtrim(Col_c2,1);
        RETURN Col_c2;
    END;
    /
    SQL> select distinct c1 ,get_c2(c1) cc2 from table;
  • 相关阅读:
    TestNG
    K近邻算法
    Python解决乱码问题
    Log4J 配置
    多线程死锁
    hadooplzo安装出错的解决方法
    B树
    设计模式
    整数序列化
    Maven
  • 原文地址:https://www.cnblogs.com/harvey888/p/6735068.html
Copyright © 2011-2022 走看看