关于Oracle不定行转列的问题
2个回答
展开全部
这个要存储过程了。
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
);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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 的后面不知道可不可以给数字。不行就换成字符。没试过。
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" 就可以了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询