You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 11g如何在查询现有列上用wm_concat拼接同ID异CusCODE活跃CoID

问题原因

你当前的语句无法正常运行,是因为没有将Table_with_value作为主查询表关联,子查询无法直接引用未在当前查询作用域声明的表字段。

非PL/SQL实现方案(Oracle 11.1g适配,无需循环)

Oracle 11.1g支持内置拼接函数wm_concat,直接通过关联分组即可实现需求,语句如下:

SELECT 
  v.CoID,
  NVL(wm_concat(DISTINCT s.CoID), 'N/A') AS active_CO_Status_for_same_ID_but_different_CusCODE,
  v.CusCODE,
  v.ID,
  v.Value
FROM Table_with_value v
LEFT JOIN Table_with_status s 
  ON v.ID = s.ID 
  AND v.CusCODE != s.CusCODE 
  AND s.Co_status = 'active'
GROUP BY v.CoID, v.CusCODE, v.ID, v.Value
ORDER BY v.CoID;

逻辑说明

  1. 以Table_with_value为基表左关联Table_with_status,关联条件直接过滤相同ID、不同CusCODE且状态为active的记录,避免后续where过滤丢失无匹配的行
  2. wm_concat负责拼接符合条件的CoID,加DISTINCT是为了避免Table_with_status存在重复CoID时出现重复拼接值,无重复场景可以去掉
  3. NVL将无匹配记录的空值替换为N/A,完全符合预期输出要求
  4. 按主表字段分组即可得到每条主表记录对应的拼接结果

兼容说明

如果你的环境禁用了非公开函数wm_concat,可以替换为SYS_CONNECT_BY_PATH的分层查询实现,逻辑一致性能满足300条以内的数据查询需求。

内容的提问来源于stack exchange,提问作者Matthew Zammit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 21:33:02