oracle行转列写法,麻烦大家帮忙写个sql,谢谢

oracle行转列写法,麻烦大家帮忙写个sql,谢谢,第1张

可以用wm_concat函数先把数据变成行显示,然后再通过截取来显示具体的月份,wm_concat转换如下

 select compay_name cn, wm_concat(income) ic

  from (select compay_name, sum(income) income, substr(time, 1, 6) time

          from income

        ---where time >=start_month and time <= end_month

         group by compay_name, substr(time, 1, 6)

         order by compay_name, substr(time, 1, 6))

 group by compay_name;

这个要存储过程了。

CREATE OR REPLACE PROCEDURE P_TEST IS

  V_SQL VARCHAR2(2000);

  CURSOR CURSOR_1 IS SELECT DISTINCT TXCLCK FROM TEST T ORDER BY XCLCK; 

    

    BEGIN

      V_SQL := 'SELECT WL,XYSL,XYCK';

      FOR V_XCLCK IN CURSOR_1

      LOOP

        V_SQL := V_SQL || ',' || 'SUM(DECODE(XCLCK,''' || V_XCLCKXCLCK ||

                 ''',XCLCKSL,0)) AS ' || V_XCLCKXCLCK;

      END LOOP;

      

      V_SQL := V_SQL || ' FROM TEST GROUP BY WL,XYSL,XYCK ORDER BY WL,XYSL,XYCK';

      --DBMS_OUTPUTPUT_LINE(V_SQL);

      V_SQL := 'CREATE OR REPLACE VIEW RESULT  AS '||  V_SQL;

      --DBMS_OUTPUTPUT_LINE(V_SQL);

      EXECUTE IMMEDIATE V_SQL;

    END;

然后

BEGIN

  P_TEST;               

END;

对了这是表:----------------建表

CREATE TABLE TEST(

    WL VARCHAR2(10),

    XYSL INTEGER,

    XYCK VARCHAR2(10),

    XCLCK VARCHAR2(10),

    XCLCKSL INTEGER,

    PC INTEGER

);

我给你写个例子,你看着我的例子来。

select  from tbname;

行转列之后的数据:

select pud, listagg(ud, ',') within group(order by null) as ud

  from tbname

 group by pud;

select

sum(decode(name, '苹果' Price,null)) as 苹果,

sum(decode(name, '香蕉 Price,null)) as 香蕉,

from a

这样

-----------------

select ID,'Data1' as Data1,'Data2' as Data2,X1 from A

union all

select ID,'Data3' as Data1,'Data4' as Data2,X2 from A

union all

以上就是关于oracle行转列写法麻烦大家帮忙写个sql,谢谢全部的内容,包括:oracle行转列写法,麻烦大家帮忙写个sql,谢谢、关于Oracle不定行转列的问题、oracle 行转列,列名不固定,求指导。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9837295.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存