我在 SQL Developer 上运行一个 SQL 查询,它使用 listagg 为单个字段返回一个或多个项目。
实际上,查询返回 listagg 具有一项或多项的记录。
我想要做的是过滤掉 listagg 仅包含一项的记录,而只返回 listagg 包含多项的记录。
这是使用 listagg 的查询部分 - 以及我想要做的一些伪代码:
Select "SingleItem", listagg(distinct "MultipleItems", ', ') as "MultipleItems"
FROM my_results mr
WHERE EXISTS
(SELECT "SingleItem", "MultipleItems"
FROM my_results
)
AND <"MultipleItems" contains more than 1 item>
有什么建议吗?
非常感谢。
一个选项可能是这样的:使用当前查询作为最终查询的 CTE(即源),该查询计算“MultipleItems”中的逗号数量:
所以:
WITH
temp
AS
(SELECT "SingleItem", LISTAGG (DISTINCT "MultipleItems", ', ') AS "MultipleItems"
FROM my_results mr
WHERE EXISTS (SELECT "SingleItem", "MultipleItems" FROM my_results))
SELECT *
FROM temp
WHERE REGEXP_COUNT ("MutlitpeItems", ',') > 0
顺便说一句,在 Oracle 中,我们真的很少将对象名称(包括列)括在双引号中。没有什么好处,只有麻烦。