如何将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
相关产品推荐
相关产品推荐

