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

SQL关联sales_flat_order与sales_flat_order_item表时合并同订单SKU为单条记录

解决方案

基于Magento订单表的MySQL环境,实现单订单单条聚合记录、同单商品按指定格式拼接的需求,直接使用GROUP_CONCAT()聚合函数配合分组查询即可实现,匹配你要求的数量xSKU, 数量xSKU商品字段格式。

核心调整逻辑

  • 单条商品记录先拼接为{购买数量}x{SKU}的格式,和示例展示规则对齐
  • 用GROUP_CONCAT()将同一订单下的所有商品字符串用, (逗号+空格)作为分隔符合并为单个字符串
  • 所有订单级别的非聚合字段加入GROUP BY分组条件,保证每个订单仅返回1条结果
  • 可选过滤:如果库中存在可配置商品的父级占位SKU,可新增SFOI.parent_id IS NULL条件,避免拼接出无效SKU

可直接运行的SQL代码

-- 若订单商品数量较多,可先执行该语句调整当前会话的字符串拼接长度上限,避免内容截断
SET SESSION group_concat_max_len = 10240;

SELECT 
YEAR(SFA.created_at) AS `YEAR`,
SFA.increment_id AS SIPNO,
CONCAT(SUBSTR(SFA.increment_id, 4, 7), REPLACE(RIGHT(SFA.created_at, 4), ':', '')) AS MOK,
GROUP_CONCAT(CONCAT(SFOI.qty_ordered, 'x', SFOI.sku) SEPARATOR ', ') AS UrunKod,
SFA.shipping_description AS KARGO,
CONVERT_TZ(SFA.created_at, '+00:00','+03:00') AS SIPTARIH
FROM sales_flat_order SFA 
INNER JOIN sales_flat_order_item SFOI ON SFA.entity_id = SFOI.order_id
WHERE SFA.`status` = 'complete' 
AND SFA.increment_id = '400241866'
AND YEAR(SFA.created_at) >= 2022
-- 可配置商品场景下取消下方注释,过滤父级占位SKU
-- AND SFOI.parent_id IS NULL
GROUP BY 
SFA.entity_id,
YEAR(SFA.created_at),
SFA.increment_id,
MOK,
SFA.shipping_description,
SIPTARIH;

效果说明

执行后返回结果和你给出的预期结构完全一致:单订单仅返回1条记录,UrunKod字段自动拼接该订单下所有商品信息,无需额外做二次数据处理。

注意:MySQL默认的GROUP_CONCAT拼接长度上限为1024字节,SKU较长或单订单商品数超过20个时大概率出现内容截断,执行查询前先运行长度调整语句即可规避该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:48:35