ORACLE合计函数cube() 和偏移分析函数lag()用法1209新增列转行listagg()函数用法

1、cube和lag函数

cube可以用来求一列的合计
lag可以用来求一列某一行的值

 select sum(ywzl) ywzl, to_char(rq, 'yyyy-mm-dd')
   from YB_JZ_SDTJ
  group by to_char(rq, 'yyyy-mm-dd') order by to_char(rq, 'yyyy-mm-dd')

在这里插入图片描述
使用cube和lag后

 --合计和上个月份功能--
select c.rq, c.ywzl, lag(c.ywzl, 1, 0) over(order by rq) lastywzl
  from (select sum(ywzl) ywzl, nvl(to_char(rq, 'yyyy-mm-dd'), '合计') rq
          from YB_JZ_SDTJ
         group by cube(to_char(rq, 'yyyy-mm-dd'))) c
 order by rq

在这里插入图片描述
可以看到合计对ywzl进行了求和 通过cube实现的 lastywzl实现了对上个月的ywzl取值 通过lag来实现的 cube函数 对那个字段group by就对哪个字段cube
lag(a,b,c) 针对a字段往上取b位,取不到则为c值 同时需要结合over使用 分组统计数据

2、列转行listagg()函数

在oracle里列转行 我首先接触到的是wm_concat()函数;但是这个函数不能将拼接出来的内容按某个字段排序
在这里插入图片描述
可以看到拼接出来的内容选项顺序是乱的因为没有按q.optionord这个字段排序;
name我想实现这个功能怎么办呢,这时候就需要listagg()这个函数了
在这里插入图片描述
看上图可以发现·按选项好也就是q.optionord字段排序了 我圈中的chr(10)是为了实现换行
简单来说用法就是:listagg(a|| b,’,’) within group (order by b)
解释:
listagg(想拼接哪个或哪些字段,‘想把这些字段按哪个符号来拼接’) within group (order by 排序的字段)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值