oracle多行记录合并成一行。

需要做个报表,把多行记录,合并成一行。简单记录下。
注:以下内容为虚构数据,可能会出现不太对的现象,逻辑上是对的。现实中的比这复杂。
原始表:

部门人数
销售30
售后20
行政8

转成:销售8人,售后20人,行政8人。
考虑到数据库版本的问题,目前用的是oracle 11g,12g的时候不再有wmsys.wm_concat(),所以改用listagg()。
下面是做报表时的一些细节。
个人认为listagg没有wmsys.wm_concat自由,所以我把表重新整理了一下:

部门人数
销售30人
售后20人
行政8人

然后用listagg连起来就行了。

select    listagg (  aa.部门人数 , ','  ) within group (order by aa.部门编号, aa.部门人数)     as 部门人数  from  部门人数

其中,引号中的逗号是分隔符。order by 后可以跟“部门人数表中的字段。
效果如下:

部门人数
销售30人,售后20人,行政8人

最后再加上个日期:
select to_char( sysdate , ‘YYYY-MM-DD’) || ‘部门人数量:’ listagg ( aa.部门人数 , ‘,’ ) within group (order by aa.部门编号, aa.部门人数) as 部门人数 from 部门人数
-------------
还有新功能:如下
listagg() within group over()
over (PARTITION BY XXX) 代替了group by 的功能 。这样会出现重复值,需要去重。本文没有测试这种情况。
listagg ( aa.部门人数 , ‘,’ ) within group (order by aa.部门编号, aa.部门人数) over (partition by xxxx)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值