我想从同一列(SRAV.XYZ)下的多个行获取一些数据,并将其与其他col连接起来,因此使用了listagg查询。
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我能够获得以下格式的输出:
physics;PROF.TMP
bio;EMPLOYEES现在,我有两个问题,我无法处理。
physics;PROF.TMP,bio;EMPLOYEES
时,我的情况不起作用(因此作了评论)
理想的产出是:
physics;TMP,bio;EMPLOYEES在这方面有任何帮助。
致以敬意,
发布于 2021-04-24 07:15:24
CASE可能因为LIKE而不能工作;用您的话来说,它的作用就好像它是=一样。通配符不见了。此外,您使用的语法似乎是错误的(从我的角度来看)。也许你是想说这样的话:
CASE
WHEN SRA.ABC like '%PROF.TMP%' THEN 'TMP'
WHEN SRA.ABC like '%PROF%' THEN 'PROF'
ELSE 'EMPLOYEES'
ENDlistagg over listagg:将当前查询用作子查询或CTE,然后再应用另一个listagg
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这是理论。如果您想要更多的东西,请提供一个简单的测试用例。
https://stackoverflow.com/questions/67240162
复制相似问题