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;
  • 相关阅读:
    图文详解 Android Binder跨进程通信机制 原理
    支链氨基酸怎么吃
    C#泛型约束
    树状结构 Tree data structure in C#
    wrap ConcurrentDictionary in BlockingCollection
    ConcurrentBag扩展 批量加入
    Dictionary GetOrAdd
    ConcurrentDictionary AddOrUpdate
    object pool
    C# 结构体定义 转换字节数组 z
  • 原文地址:https://www.cnblogs.com/harvey888/p/6735068.html
Copyright © 2011-2022 走看看