使用 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 列排序。如何实现?
您应该可以将 DISTINCT
与 LISTAGG
一起使用:
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;
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 列排序。如何实现?
您应该可以将 DISTINCT
与 LISTAGG
一起使用:
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;