首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListAgg Over ListAgg - Oracle

ListAgg Over ListAgg - Oracle
EN

Stack Overflow用户
提问于 2021-04-24 07:03:03
回答 1查看 57关注 0票数 0

我想从同一列(SRAV.XYZ)下的多个行获取一些数据,并将其与其他col连接起来,因此使用了listagg查询。

代码语言:javascript
复制
SELECT LISTAGG (
 REGEXP_SUBSTR (SRAV.XYZ,
    '[^:]+$'),
   ';')
WITHIN GROUP (ORDER BY
REGEXP_SUBSTR (
SRAV.XYZ,
'[^:]+$')) ||';'||SRA.ABC
  /*(CASE
      WHEN SRA.ABC like 'PROF.TMP' THEN SRA.ABC = 'TMP'
      WHEN SRA.ABC like 'PROF' THEN SRA.ABC ='PROF'
      ELSE SRA.ABC='EMPLOYEES' END) */
FROM TEST1 SPAEM,
     TEST2 SRAV,
     TEST3  srm,
     TEST4  SRA
       WHERE SRAV.RID = srm.RGID
         AND SRAV.PID IN
              ('123RTU23',
               '456U43',
               'AB4577Y')
        AND SRAV.XYZ IS NOT NULL
        AND SPAEM.EMPID = srm.SEC_UUID
        AND SRAV.PID = SRA.PRID
        AND SPAEM.EMPID = 139806
        group by ABC

我能够获得以下格式的输出:

代码语言:javascript
复制
  physics;PROF.TMP
  bio;EMPLOYEES

现在,我有两个问题,我无法处理。

  1. 我希望输出的格式如下:

physics;PROF.TMP,bio;EMPLOYEES

  1. --当我试图连接.

时,我的情况不起作用(因此作了评论)

理想的产出是:

代码语言:javascript
复制
   physics;TMP,bio;EMPLOYEES

在这方面有任何帮助。

致以敬意,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-24 07:15:24

CASE可能因为LIKE而不能工作;用您的话来说,它的作用就好像它是=一样。通配符不见了。此外,您使用的语法似乎是错误的(从我的角度来看)。也许你是想说这样的话:

代码语言:javascript
复制
CASE
  WHEN SRA.ABC like '%PROF.TMP%'   THEN 'TMP'
  WHEN SRA.ABC like '%PROF%'       THEN 'PROF'
  ELSE 'EMPLOYEES' 
END

listagg over listagg:将当前查询用作子查询或CTE,然后再应用另一个listagg

代码语言:javascript
复制
with your_current_query as
  (select listagg(...) within group over (...) as result_1
   from ...
   where ...
  )
-- apply listagg to result_1
select listagg(result_1, ', ') over (...) as final_result
from your_current_query

这是理论。如果您想要更多的东西,请提供一个简单的测试用例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67240162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档