关于Oracle不定行转列的问题

类似这种的转换相同Id的行根据s_id的不同转换成不同的列,值取每一行Value的值求大神... 类似这种的转换 相同Id的行根据s_id的不同转换成不同的列,值取每一行Value的值 求大神 展开
 我来答
yybolou
推荐于2016-09-07 · TA获得超过2889个赞
知道小有建树答主
回答量:2516
采纳率:0%
帮助的人:985万
展开全部

这个要存储过程了。

CREATE OR REPLACE PROCEDURE P_TEST IS
  V_SQL VARCHAR2(2000);
  CURSOR CURSOR_1 IS SELECT DISTINCT T.XCLCK 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_XCLCK.XCLCK ||
                 ''',XCLCKSL,0)) AS ' || V_XCLCK.XCLCK;
      END LOOP;
      
      V_SQL := V_SQL || ' FROM TEST GROUP BY WL,XYSL,XYCK ORDER BY WL,XYSL,XYCK';
      --DBMS_OUTPUT.PUT_LINE(V_SQL);
      V_SQL := 'CREATE OR REPLACE VIEW RESULT  AS '||  V_SQL;
      --DBMS_OUTPUT.PUT_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
);

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
helly84
2014-06-24 · TA获得超过329个赞
知道小有建树答主
回答量:737
采纳率:77%
帮助的人:328万
展开全部
select id ,
max(case when sub.s_id = 2 then value else null end ) as 2
max(case when sub.s_id = 3 then value else null end ) as 3
max(case when sub.s_id = 4 then value else null end ) as 4
from
table sub
group by id

as 的后面不知道可不可以给数字。不行就换成字符。没试过。
更多追问追答
追问
这个方法我试过 后面的数字是不行的 我现在要的是做成动态的 因为行数不固定的
追答
行数不固定,那出列怎么初啊。。一个sql不行
你这是要写到excel么?还是光是看啊。
数字不行那个,你可以换成字符 as "2" 就可以了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式