汇总两次-首先使用ID
和STATUS
生成计数,然后汇总每个ID
的所有状态和计数:
SELECT ID,
LISTAGG(status || ':' || status_count, ', ')
WITHIN GROUP (ORDER BY status) AS results
FROM (
SELECT ID,
STATUS,
COUNT(STATUS) AS status_count
FROM TRANSACTION
GROUP BY
ID,
STATUS
)
GROUP BY
ID;
其中,对于样本数据:
CREATE TABLE transaction (ID, status) AS
SELECT 1000, 'C' FROM DUAL UNION ALL
SELECT 1231, 'C' FROM DUAL UNION ALL
SELECT 1231, 'C' FROM DUAL UNION ALL
SELECT 1231, 'S' FROM DUAL UNION ALL
SELECT 1231, 'S' FROM DUAL UNION ALL
SELECT 1231, 'S' FROM DUAL UNION ALL
SELECT 1231, 'E' FROM DUAL;
输出:
ID |
RESULTS |
1000 |
C:1 |
1231 |
C:2, E:1, S:3 |
fiddle