温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

通过sql实现动态行转列

发布时间:2020-06-30 18:51:54 来源:网络 阅读:1246 作者:小陈子057 栏目:关系型数据库

上一章我们讲了固定行转列,本章我们就将一下怎么动态实现行转列的。因为有时候需要行专列的值有成千上万条,不可能再用固定行转列的方法,否则你一定会崩溃掉的。好了,废话不多说,开始吧!
常见一张表tmp_test,内容如下:
通过sql实现动态行转列

实现代码:
create or replace procedure p_test is
v_sql varchar2(2000);

cursor cursor_1 is
select distinct subject from tmp_test order by subject;

begin
v_sql := 'select username';
for v_subject in cursor_1 loop
v_sql := v_sql || ',' ||'sum(decode(subject,''' ||v_subject.subject ||''',source)) as ' ||v_subject.subject;
dbms_output.put_line(v_sql);
end loop;

v_sql := vql || ' from tmp_test group by username';
dbms_output.put_line(v_sql);

v_sql := 'create or replace view test_result as ' || v_sql;

execute immediate v_sql;

end;
存储过程已经写好了,开始调用存过:
begin
p_test;
end;

查询视图test_result:
代码实现:
select * from test_result;
数据如下:
通过sql实现动态行转列

到这一步,动态行转列就已经实现了!希望对小伙伴有帮助!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI