Oracle的listagg函数在group by中使用时提示标识符无效,用wm_concat可以,但想将连接符换成分号

SELECT A.PACK_NO,
(
/*-- plsql中执行时提示错误“ORA-00904:"A"."PACK_NO":标识符无效”
SELECT LISTAGG(ORDER_REMARK, '; ') WITHIN GROUP(ORDER BY ORDER_REMARK)
FROM (SELECT DISTINCT ORDER_REMARK
FROM T_BUSIS_PACKING_SLIP_DETAIL
WHERE PACK_NO = A.PACK_NO)*/

    /*PACK_NO  ORDER_REMARKS TOTAL_EXPORT_PRICE
    PN000008532  从2009年起订  9645
    PN000008500  从2012年起订购,从2014年起按长期订购,长期订单  从2013年起订 52356*/
    SELECT WM_CONCAT(DISTINCT TSD.ORDER_REMARK)
      FROM T_BUSIS_PACKING_SLIP_DETAIL TSD
     WHERE TSD.PACK_NO = A.PACK_NO) AS ORDER_REMARKS,
   (SELECT SUM(TSD.SETTLE_ACTURE_AMOUNT * TSD.PRO_NUM)
      FROM T_BUSIS_RELEASE_ORDER_DETAIL TRD
      JOIN T_BUSIS_PACKING_SLIP_DETAIL TSD
        ON TSD.RELEASE_DETAIL_ID = TRD.ID
     WHERE TSD.PACK_NO = A.PACK_NO
     GROUP BY TSD.PACK_NO) AS TOTAL_EXPORT_PRICE

FROM T_BUSIS_PACKING_SLIP A
WHERE A.PACK_NO IN ('PN000008532', 'PN000008500')
ORDER BY A.CUST_ACCT_CODE, A.PACK_NO ASC

/*
-- 单独摘出来执行可以
-- LISTAGG(ORDER_REMARK,';')WITHI
-- 从2012年起订购; 从2014年起按长期订购; 长期订单 从2013年起订
SELECT LISTAGG(ORDER_REMARK, '; ') WITHIN GROUP(ORDER BY ORDER_REMARK)
FROM (SELECT DISTINCT ORDER_REMARK
FROM T_BUSIS_PACKING_SLIP_DETAIL
WHERE PACK_NO = 'PN000008500')
*/

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐