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

如何通过SQL构建按颜色分组嵌套尺寸的聚合JSON对象

实现说明

这个需求完全可以实现,根据你使用的数据库版本选择对应方案即可,不需要做复杂的二次开发。

方案1:SQL Server 2016及以上版本(推荐,数据库层直接输出目标JSON)

SQL Server 2016开始原生支持FOR JSON语法,可以直接构造多层嵌套的JSON结构,和你需要的目标格式完全匹配,核心逻辑是按「商品→颜色→尺寸库存」三层逐级嵌套聚合。
直接执行下面的SQL就能拿到符合要求的JSON结果:

SELECT
  stokkodu,
  adi,
  afiyat,
  -- 嵌套构造当前商品下的颜色分组
  (
    SELECT
      renk,
      -- 嵌套构造当前颜色下的尺寸库存列表
      (
        SELECT
          beden,
          SUM(kalan) AS kalan
        FROM [viabase].[dbo].[Q_KALANS] s
        WHERE s.stokkodu = c.stokkodu AND s.renk = c.renk
        GROUP BY s.beden
        FOR JSON PATH
      ) AS bedenler
    FROM (
      SELECT DISTINCT stokkodu, renk
      FROM [viabase].[dbo].[Q_KALANS]
    ) c
    WHERE c.stokkodu = p.stokkodu
    FOR JSON PATH
  ) AS renkler
FROM (
  SELECT DISTINCT stokkodu, adi, afiyat
  FROM [viabase].[dbo].[Q_KALANS]
) p
FOR JSON PATH, ROOT('urunler')

说明:上面SQL里的bedenler(尺寸列表)、renkler(颜色列表)、urunler(商品根节点)均和目标JSON格式的key对齐,如果需要调整字段名直接修改对应别名即可。


方案2:低版本SQL Server(不支持原生JSON语法)

如果你的数据库版本低于2016,先执行你已经写好的平铺查询语句,把结果取到应用层之后按两层分组做聚合即可:

  • 第一步先按stokkodu(商品编码)分组,把相同商品的记录归到同一个商品节点下,填充商品编码、名称、价格属性
  • 第二步在每个商品节点下,再按renk(颜色)分组,把相同颜色的记录归到同一个颜色节点下
  • 最后在每个颜色节点下,把对应记录的beden(尺寸)、kalan(库存)整理成数组
    聚合完成后把结构序列化成JSON返回给客户端即可,逻辑简单,所有后端语言都能快速实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:57:19