如何在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;

 

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3