Oracle 11 listagg拼接字符串过长的替代函数


SELECT AA.sfzh AS D_GRDABH,AA.happentime,
    bl.ZSTEXT AS Y_ZZ,
       (bl.TZTEXT ||','||bl.XBSTEXT
       ||','||bl.JWSTEXT||','||bl.GMSTEXT ||','||bl.JKZD
       ||','||bl.SSY ||'/'||bl.SZY) AS Y_JCJG,
       YS AS Y_JZYS,ZDXX.ZDMC AS Y_ZDJL,SYDW.MC AS YYBM,
       AA.Y_CLCS,'0' AS qdqxz,'100' AS wzd,'HIS' AS jkbs
       FROM (
SELECT yybm,sfzh,jzlsh,happentime,
--listagg(yyqk,'</br>') within group(order by jzlsh) AS Y_CLCS,
--这里的listagg函数有长度限制2000,用xmlagg函数替代
xmlagg(xmlparse(content yyqk||'</br>' wellformed) order by jzlsh).getclobval() AS Y_CLCS,
YS FROM (
SELECT 
    MZ.YYBM,
       MZ.JZLSH,
       DA.SFZH /*身份证号*/,
       MZ.YS,
       to_char(MZ.RQ,'YYYY-MM-DD') AS happentime,
       (( CASE MZ.LBBZ
         WHEN '3' THEN
          XM.MC
         ELSE
          DM.TYM
       END ) /*药品/项目名称*/ ||','||MZ.ZL /*药品用量*/ || ZLDW.MC  /*药品用量单位*/ 
       ||','||YYTJ.MC /*药品用药方式*/||','||MZ.MCJL /*每次剂量*/ 
       || JLDW.MC /*剂量单位*/ ||','|| DM.YPGG /*药品规格*/) AS yyqk
  FROM YW_MZYS_MZYZ MZ
  LEFT JOIN A DM ON MZ.BM = DM.YPBM
  LEFT JOIN B XM  ON MZ.BM = XM.BM
  LEFT JOIN C YYTJ ON MZ.GYFS = YYTJ.BM AND MZ.YYBM = YYTJ.YYBM
  LEFT JOIN D JLDW  ON JLDW.DLBM = '0021' AND JLDW.BM = MZ.JLDW
  LEFT JOIN E ZLDW  ON ZLDW.DLBM = '0020' AND ZLDW.BM = MZ.ZLDW
  LEFT JOIN H DA ON DA.YYBM = MZ.YYBM AND DA.KH = MZ.KH
 WHERE MZ.SKLSH IS NOT NULL  AND DA.sfzh IS NOT NULL
and mz.rq between to_date(to_char(sysdate,'yyyy')||'-01-01''yyyy-mm-dd') and to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd')
 ) GROUP BY yybm,sfzh,jzlsh,happentime,YS
 ) AA
 LEFT JOIN N bl ON bl.JZLSH = AA.JZLSH
 LEFT JOIN (SELECT JG.JZLSH,ICD.MC AS ZDMC FROM Q JG LEFT JOIN W ICD ON ICD.BM = JG.ZDBM WHERE JG.ZDLX = '1' AND ICD.MC IS NOT null) ZDXX
 ON  ZDXX.JZLSH = AA.JZLSH
 LEFT JOIN U SYDW ON SYDW.BM = AA.YYBM
 		
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值