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 排序的字段)