1. LISTAGG(RISK_FLAG, ',') WITHIN GROUP (ORDER BY END_TIME,ID)
SELECT A.EQUIPMENTCODE,LISTAGG(RISK_FLAG, '') WITHIN GROUP (ORDER BY END_TIME,ID) AS RISK_FLAG_ALL FROM(
SELECT 10051 ID ,'10V-LTZ-EHZB-AX-BT' EQUIPMENTCODE,'2019-02-03' END_TIME,'N' RISK_FLAG FROM DUAL
UNION
SELECT 10012 ID ,'10V-LTZ-EHZB-AX-BT' EQUIPMENTCODE,'2019-02-05' END_TIME,'Y' RISK_FLAG FROM DUAL
UNION
SELECT 10011 ID ,'10V-LTZ-EHZB-AX-BT' EQUIPMENTCODE,'2019-05-03' END_TIME,'N' RISK_FLAG FROM DUAL
UNION
SELECT 10061 ID ,'10V-LTZ-EHZB-AX-BT' EQUIPMENTCODE,'2019-05-03' END_TIME,'N' RISK_FLAG FROM DUAL
UNION
SELECT 11011 ID ,'10V-LTZ-EHZB-BX-BT' EQUIPMENTCODE,'2019-05-03' END_TIME,'N' RISK_FLAG FROM DUAL
) A GROUP BY A.EQUIPMENTCODE
2. LISTAGG返回值是varchar类型,不能超过4000.一旦超过4000,就会报错
这种情况下,要改写LISTAGG,如下:
SELECT A.EQUIPMENTCODE,
--LISTAGG(RISK_FLAG, '') WITHIN GROUP (ORDER BY END_TIME,ID) AS RISK_FLAG_ALL,
xmlagg(xmlparse(content RISK_FLAG||'' wellformed) order by END_TIME,ID).getclobval() AS RISK_FLAG_ALL2
FROM(
SELECT 10051 ID ,'10V-LTZ-EHZB-AX-BT' EQUIPMENTCODE,'2019-02-03' END_TIME,'N' RISK_FLAG FROM DUAL
UNION
SELECT 10012 ID ,'10V-LTZ-EHZB-AX-BT' EQUIPMENTCODE,'2019-02-05' END_TIME,'Y' RISK_FLAG FROM DUAL
UNION
SELECT 10011 ID ,'10V-LTZ-EHZB-AX-BT' EQUIPMENTCODE,'2019-05-03' END_TIME,'N' RISK_FLAG FROM DUAL
UNION
SELECT 10061 ID ,'10V-LTZ-EHZB-AX-BT' EQUIPMENTCODE,'2019-05-03' END_TIME,'N' RISK_FLAG FROM DUAL
UNION
SELECT 11011 ID ,'10V-LTZ-EHZB-BX-BT' EQUIPMENTCODE,'2019-05-03' END_TIME,'N' RISK_FLAG FROM DUAL
) A GROUP BY A.EQUIPMENTCODE