使用 LISTAGG 时使用 ORDER BY

Using ORDER BY when using LISTAGG

SELECT B.ID,
LTRIM(LISTAGG(ITEM_ID,';')WITHIN GROUP(ORDER BY B.PG_NO), '0') as PROCESS_ID
FROM table1 A
JOIN table2 B
ON A.CAS_ID=B.CAS_ID
WHERE B.DATE = '2022-03-03'
AND B.ID IS NOT NULL
AND P_CD NOT IN ('1','2','5','7')
AND A.ID IN(12690222,24515955)
GROUP BY B.ID

当我运行上述查询时,我得到如下所述的结果:

ID           PROCESS_ID

12690222     5544973696;5544973696;5544973696;5544973696
24515955     777239598;777239598;777239598

我只想显示 PROCESS_ID 列中的不同值,结果应按 PG_NO 列排序。如何实现?

您应该可以将 DISTINCTLISTAGG 一起使用:

SELECT B.ID,
       LTRIM(LISTAGG(DISTINCT ITEM_ID, ';') WITHIN GROUP
           (ORDER BY <some_col>), '0') AS PROCESS_ID
FROM table1 A
INNER JOIN table2 B ON A.CAS_ID = B.CAS_ID
WHERE B.DATE = '2022-03-03' AND
      B.ID IS NOT NULL AND
      P_CD NOT IN ('1', '2', '5', '7') AND
      A.ID IN (12690222, 24515955)
GROUP BY B.ID;