Oracle pivot函数动态行转列方法

在工作中遇到动态行转列的需求,本文详细介绍了如何使用Oracle的pivot函数来解决这一问题。从思考过程、实现步骤到最终结果,作者分享了在尝试动态SQL和匿名块过程中遇到的挑战及解决方案,提供了一个脱敏后的实现示例,适合数据库管理和报表开发人员参考。
摘要由CSDN通过智能技术生成

起因

工作中遇到个问题,需要支持动态行转列,方便报表展示。

起初这样写:👇

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 
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值