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

SQL如何为type值处于0到9区间的行分配相同group_id

分组需求SQL实现方案

核心逻辑是通过累加标记实现动态分组:每遇到1条type不在0-9区间的行(即页眉/页脚行),分组计数+1,后续所有type在0-9区间的明细行沿用当前分组计数作为group_id,直到遇到下一个非0-9的type行。

实现代码

你可以直接在生成#myData临时表后执行以下语句完成group字段更新:

WITH group_calc AS (
    SELECT 
        id,
        type,
        -- 累加非明细行标记生成group_id
        SUM(CASE WHEN type NOT BETWEEN '0' AND '9' THEN 1 ELSE 0 END) 
            OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS calculated_group
    FROM #myData
)
UPDATE t
SET t.[group] = gc.calculated_group
FROM #myData t
INNER JOIN group_calc gc ON t.id = gc.id
-- 如果你只需要给type在0-9的明细行赋值group,保留页眉页脚的group为空,可取消注释下面的条件
-- WHERE t.type BETWEEN '0' AND '9'

验证与注意事项

  1. 执行完更新后可以用以下语句核对结果是否符合预期:
SELECT id, type, [group] FROM #myData ORDER BY id
  1. 方案依赖id列的顺序和你原始文件的导入顺序完全一致,如果有明确可用于排序的字段,建议把生成id时的ORDER BY (SELECT NULL)替换为真实排序字段,避免顺序错乱导致分组错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:36:03