[英]Oracle Listagg Sub query
SELECT e.pem_id AS id,
e.pem_subject AS subject,
e.pem_content AS content,
e.pem_sent_date AS sentdate,
e.pem_ref_id AS referenceid,
e.pem_from_usr_id AS userid,
NULL AS misc,
(listagg(str.str_us_id, ', ') within GROUP(ORDER BY '') AS attachedusers FROM
proj_email_usrs eu LEFT OUTER JOIN st_register str ON
eu.pmu_str_id = str.str_id WHERE eu.pmu_pem_id = '26' GROUP BY '')
FROM proj_email e
WHERE e.pem_prj_id = '33'
AND e.pmu_pem_id = '26'
AND e.pem_status = 'S';
It is throwing error as 它正在抛出错误
ORA-01722: invalid number
ORA-01722:无效的号码
01722. 00000 - "invalid number"
01722. 00000 - “无效号码”
*Cause: The specified number was invalid.
*原因:指定的号码无效。
*Action: Specify a valid number.
*操作:指定有效数字。
I assume you want a query like this: 我假设您想要这样的查询:
SELECT E.PEM_ID as Id, E.PEM_SUBJECT as Subject, E.PEM_CONTENT as Content,
E.PEM_SENT_DATE as SentDate, E.PEM_REF_ID as ReferenceId,
E.PEM_FROM_USR_ID as UserId, NULL as Misc,
(SELECT LISTAGG(STR.STR_US_ID, ', ') WITHIN GROUP (ORDER BY STR.STR_US_ID)
FROM PROJ_EMAIL_USRS EU LEFT OUTER JOIN
ST_REGISTER STR
ON EU.PMU_STR_ID = STR.STR_ID
WHERE EU.PMU_PEM_ID = E.PMU_PEM_ID -- Correlation clause
) as AttachedUsers
FROM PROJ_EMAIL E
WHERE E.PEM_PRJ_ID = 33 AND E.PMU_PEM_ID = 26 AND E.PEM_STATUS = 'S' ;
Comments: 评论:
SELECT
before LISTAGG()
. LISTAGG()
之前添加了SELECT
。 Needed for a subquery. GROUP BY
. GROUP BY
。 Not needed, because you want the subquery to always return one row. ORDER BY
column for WITHIN GROUP
. WITHIN GROUP
添加了ORDER BY
列。 Not necessary, but reasonable to keep the ids in order.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.