ORACLE分析函数

1、列转行函数listagg():

这是一个Oracle的列转行函数:LISTAGG()

实例1:

with HB_MEDICAL as(
  select '一次' DAYTIME, '2片' MEDICALNUM ,'20131022001' VISITCODE,'珍菊降压片' MEDICAL from dual union all
  select '二次' DAYTIME, '3片' MEDICALNUM ,'20131022001' VISITCODE,'复方降压片' MEDICAL from dual union all
  select '三次' DAYTIME, '4片' MEDICALNUM ,'20131022001' VISITCODE,'兰迪' MEDICAL from dual union all
  select '四次' DAYTIME, '5片' MEDICALNUM ,'20131022002' VISITCODE,'硝苯地平' MEDICAL from dual union all
  select '五次' DAYTIME, '6片' MEDICALNUM ,'20131022002' VISITCODE,'氨氯地平' MEDICAL from dual union all
  select '六次' DAYTIME, '7片' MEDICALNUM ,'20131022003' VISITCODE,'(基)(零甲)酒石酸美托洛尔片(20#*25MG)' MEDICAL from dual 
)
SELECT HM.VISITCODE,
       LISTAGG(HM.MEDICAL, ',') WITHIN GROUP(ORDER BY VISITCODE) OVER(PARTITION BY VISITCODE) LASTMEDICION
  FROM HB_MEDICAL HM

 结果1:

1	20131022001	珍菊降压片,复方降压片,兰迪
2	20131022001	珍菊降压片,复方降压片,兰迪
3	20131022001	珍菊降压片,复方降压片,兰迪
4	20131022002	硝苯地平,氨氯地平
5	20131022002	硝苯地平,氨氯地平
6	20131022003	(基)(零甲)酒石酸美托洛尔片(20#*25MG)

 规则:LISTAGG(XXX,XXX) WITHIN GROUP( ORDER BY XXX)

 当在你不实用Group by语句时候,也可以使用LISTAGG函数,配合over分析函数子句:

 实例2

with HB_MEDICAL as(
  select '一次' DAYTIME, '2片' MEDICALNUM ,'20131022001' VISITCODE,'珍菊降压片' MEDICAL from dual union all
  select '二次' DAYTIME, '3片' MEDICALNUM ,'20131022001' VISITCODE,'复方降压片' MEDICAL from dual union all
  select '三次' DAYTIME, '4片' MEDICALNUM ,'20131022001' VISITCODE,'兰迪' MEDICAL from dual union all
  select '四次' DAYTIME, '5片' MEDICALNUM ,'20131022002' VISITCODE,'硝苯地平' MEDICAL from dual union all
  select '五次' DAYTIME, '6片' MEDICALNUM ,'20131022002' VISITCODE,'氨氯地平' MEDICAL from dual union all
  select '六次' DAYTIME, '7片' MEDICALNUM ,'20131022003' VISITCODE,'(基)(零甲)酒石酸美托洛尔片(20#*25MG)' MEDICAL from dual 
)
SELECT HM.DAYTIME,
       HM.MEDICALNUM,
       HM.VISITCODE,
       LISTAGG(HM.MEDICAL, ',') WITHIN GROUP(ORDER BY VISITCODE) OVER(PARTITION BY VISITCODE) LASTMEDICION
  FROM HB_MEDICAL HM

 结果2:

1	一次	2片	20131022001	珍菊降压片,复方降压片,兰迪
2	二次	3片	20131022001	珍菊降压片,复方降压片,兰迪
3	三次	4片	20131022001	珍菊降压片,复方降压片,兰迪
4	四次	5片	20131022002	硝苯地平,氨氯地平
5	五次	6片	20131022002	硝苯地平,氨氯地平
6	六次	7片	20131022003	(基)(零甲)酒石酸美托洛尔片(20#*25MG)

 总结:LISTAGG()把它当作SUM()函数来求字符串和。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值