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

如何正确编写Oracle SQL实现按PNTO_VNTA分组拼接CARGO字段值

问题原因

  • 你当前的SQL存在两个错误导致输出不符合预期:
    1. GROUP BY 子句中加入了g.cargo字段,会按每个不同的CARGO值分组生成单独行,无法把所有匹配的CARGO合并到同一行展示
    2. LISTAGG语法使用错误,分隔符需要放在LISTAGG的参数括号内,且不需要加OVER()开窗子句,直接用聚合形式的LISTAGG即可

修正后的SQL代码

SELECT
    s.PNTO_VNTA,
    LISTAGG(g.CARGO, ', ') WITHIN GROUP (ORDER BY g.CARGO) AS PRODUCTOS
FROM
    PNTOS_VNTA s,
    CARGOS g
WHERE
    s.crgo = g.CARGO
    AND s.PNTO_VNTA = 12345
GROUP BY 
    s.PNTO_VNTA;

补充说明

如果你的Oracle版本是19c及以上,担心拼接的内容过长触发长度超限报错,可以加ON OVERFLOW TRUNCATE参数处理溢出场景,写法为LISTAGG(g.CARGO, ', ' ON OVERFLOW TRUNCATE '...' WITHOUT COUNT) WITHIN GROUP (ORDER BY g.CARGO)

内容的提问来源于stack exchange,提问作者Stiven Medina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:36:03