起因
工作中遇到个问题,需要支持动态行转列,方便报表展示。
起初这样写:👇
select *
from table_name1 a
pivot (sum(nvl(citycode,0)) for co in (select distinct citycode from table_name1);
👆👆👆👆👆👆👆👆👆👆👆👆👆👆 ==>绝对报错.....
还有些文章用的只查询但是输出的是XML格式,本人愚钝,没看懂。
从网上很多都是介绍如何使用行专列函数 PIVOT的文章,于是在折腾一番无果之后,开始静下心来思考如何实现。
思考过程
大致思路如下:
目的: 动态行转列
困难: pivot 函数不支持 IN( 子查询)
思路:
1、根据其语法,要实现 IN ( '值’ as 别名) 这样的想过
2、考虑使用动态SQL拼接
3、尝试匿名块试一下
实现过程
1、搭个框架
declare
v_alias varchar2(2000);
v_sql varchar2(4000);
begin
select ''''||co||''''||' as ' || citycode
into v_alias
from (select