oracle使用wm_concat 进行分组拼接

本文介绍Oracle数据库中WM_CONCAT函数的使用方法及注意事项,该函数类似于MySQL中的GROUP_CONCAT,用于将分组后的记录用指定字符连接成一个字符串。文章通过具体示例解释如何正确使用WM_CONCAT,并解决在ibatis映射时出现的错误。
摘要由CSDN通过智能技术生成
oracle 的wm_concat 和mysql 的group_concat类似,主要是先分组,然后将分组后输入同组的的内容用","拼接在一期

例子:


SELECT a.period_id,
  wm_concat( b.activity_id) ACTIVITY_ID,
  wm_concat(a.lottery_number) LOTTERY_NUMBER,
  wm_concat(b.period_number) PERIOD_NUMBER,
  wm_concat(b.total_amount) COUNT,
  wm_concat(REPLACE(MOBILE, SUBSTR(a.mobile,4,4), '****')) MOBILE,
  wm_concat(TO_CHAR(b.open_time,'yyyy-mm-dd hh24:mi:ss') ) OPEN_TIME
FROM A5_PPS_SEIZE_LOTTERY a ,
  a5_pps_seize_activity_period b
WHERE a.period_id=b.period_id

那为什么我还wm_concat 那么多别的字段了?因为出来要返回period_id,mobile外,其他字段也需要返回,所有虽然拼接多了很多字段,但是有些自读是一样的,比如 ACTIVITY_ID等,这些自读返回后 用“,”切割成数组取出第一个就好了。

刚开始 使用ibatis映射时老是报错

Cause: com.ibatis.common.beans.ProbeException: There is no WRITEABLE property named 'ACTIVITY_ID)' in class 'java.lang.Object'

原始简化代码如下:

SELECT *
FROM
  (SELECT rownum rn,
    d.*
  FROM
    (SELECT a.period_id,
      wm_concat( b.activity_id)
    FROM A5_PPS_SEIZE_LOTTERY a ,
      a5_pps_seize_activity_period b
    WHERE a.period_id=b.period_id
    AND a.is_win     =1
    GROUP BY a.period_id
    ORDER BY a.period_id DESC
    )d
  )
WHERE rn > 0
AND rn  <= 10 
    

发来发现  wm_concat( b.activity_id)  后面要取个别名,才会不报上面那个映射错误,正确写法如下

SELECT *
FROM
  (SELECT rownum rn,
    d.*
  FROM
    (SELECT a.period_id,
      wm_concat( b.activity_id) activity_id
    FROM A5_PPS_SEIZE_LOTTERY a ,
      a5_pps_seize_activity_period b
    WHERE a.period_id=b.period_id
    AND a.is_win     =1
    GROUP BY a.period_id
    ORDER BY a.period_id DESC
    )d
  )
WHERE rn > 0
AND rn  <= 10 








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值