您可以过滤一个listagg以仅返回多个结果吗?

问题描述 投票:0回答:1

我在 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>

有什么建议吗?

非常感谢。

sql oracle listagg
1个回答
0
投票

一个选项可能是这样的:使用当前查询作为最终查询的 CTE(即),该查询计算“MultipleItems”中的逗号数量:

  • 如果只有一项,则根本没有逗号(因此计数为 0)
  • 否则,
    • 如果有两项,则有 1 个逗号
    • 三项 - 2 个逗号
    • 等等

所以:

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 中,我们真的很少将对象名称(包括列)括在双引号中。没有什么好处,只有麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.