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

如何将SQL查询中多行MODULA值合并为单行逗号分隔形式?

解决SQL中同一分组下合并MODULA列值的问题

你的问题核心是GROUP BY子句错误地包含了STUFF(RUN_ESEGUI.ESE_UDC, 2, 3, ''),这会让每个处理后的MODULA值仍然单独作为分组依据,导致STRING_AGG无法将同一主分组下的多个MODULA值合并。

正确的做法是:先对每个RUN_ESEGUI.ESE_UDC执行STUFF处理,再用STRING_AGG将同一主分组下的处理后值合并;同时GROUP BY只保留需要作为分组维度的字段(POZICIJA、NALOG、# STAVKI对应的原字段),不需要包含聚合或处理后的MODULA字段。

修正后的SQL语句

SELECT        
    MAG_BANCHINE.BAN_BANCHINA AS POZICIJA, 
    MAG_BANCHINE.BAN_ORDINE AS NALOG, 
    DAT_ORDINI.ORD_RIGHETOT AS [# STAVKI],    
    STRING_AGG(STUFF(RUN_ESEGUI.ESE_UDC, 2, 3, ''), ', ') AS MODULA, 
    SUM(DAT_ARTICOLI.ART_PMU * DAT_ORDINI_RIGHE.RIG_QTAR) AS MASA
FROM 
    DAT_ORDINI 
INNER JOIN
    MAG_BANCHINE ON DAT_ORDINI.ORD_ORDINE = MAG_BANCHINE.BAN_ORDINE 
INNER JOIN
    DAT_ORDINI_RIGHE ON DAT_ORDINI.ORD_ORDINE = DAT_ORDINI_RIGHE.RIG_ORDINE 
INNER JOIN
    RUN_ESEGUI ON DAT_ORDINI_RIGHE.RIG_RIGA = RUN_ESEGUI.ESE_RIGA  
INNER JOIN
    DAT_ARTICOLI ON DAT_ORDINI_RIGHE.RIG_ARTICOLO = DAT_ARTICOLI.ART_ARTICOLO
GROUP BY 
    MAG_BANCHINE.BAN_BANCHINA, 
    MAG_BANCHINE.BAN_ORDINE, 
    DAT_ORDINI.ORD_RIGHETOT
ORDER BY 
    POZICIJA

关键改动说明

  • 聚合逻辑调整:将STUFF函数嵌套进STRING_AGG内部,先对每个ESE_UDC值做截取处理,再将同一分组下的所有处理后值用逗号分隔合并。
  • GROUP BY简化:移除了STUFF(RUN_ESEGUI.ESE_UDC, 2, 3, ''),只保留三个核心分组字段,确保同一POZICIJA、NALOG、# STAVKI的行被归为一组。
  • SUM聚合正确性:合并分组后,SUM会计算该分组下所有明细行的ART_PMU * RIG_QTAR总和,符合你期望的结果逻辑。

执行上述语句后,就能得到你想要的结果:同一分组下的MODULA值合并为单行,用逗号分隔。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:10:35