我正在尝试获取以下查询的输出
select
listagg((REGEXP_SUBSTR(ABC, '[^:]+$')),';') AS Unit , (select 'XYZ' from dual)
from
MNO
where
BATCH in (select BATCH from PQR
where TYPE like 'Emp'
and ORG like 'XYZ')
如果我删除 (select 'XYZ' from dual)
,它工作正常,但我需要单位和组织信息。
当前查询导致错误
<块引用>ORA-00937:不是单个组函数
问候
答案 0 :(得分:1)
不要使用子查询。
select listagg((REGEXP_SUBSTR(ABC, '[^:]+$')),';') AS Unit ,
'XYZ'
from MNO
where BATCH in (select BATCH from PQR where TYPE = 'Emp' and ORG = 'XYZ')
答案 1 :(得分:1)
尝试只选择字符串文字 'XYZ'
而不是使用子查询:
SELECT
LISTAGG(REGEXP_SUBSTR(ABC, '[^:]+$'), ';') AS Unit,
'XYZ'
FROM MNO m
WHERE EXISTS (SELECT 1 FROM PQR p WHERE p.BATCH = m.BATCH AND
TYPE = 'Emp' AND ORG = 'XYZ');
注意:WHERE
子查询的逻辑不清楚。不清楚您是要在 Emp
列中的任何位置查找 Type
还是要完全匹配。对于后者,请使用 WHERE ... TYPE LIKE '%Emp%'
,对 ORG
使用类似的方法。
答案 2 :(得分:0)
似乎您需要在包含 join
的 select 语句中对组织进行聚合,例如
SELECT p.org, LISTAGG((REGEXP_SUBSTR(m.abc, '[^:]+$')), ';') AS Unit
FROM MNO m
JOIN PQR p
ON m.batch = p.batch
WHERE p.type LIKE '%Emp%' -- you may replace with 'Emp%' or '%Emp' or 'Emp'
AND p.org LIKE '%XYZ%' -- you may replace with 'XYZ%' or '%XYZ' or 'XYZ'
GROUP BY p.org