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

SQL Server实现1-7循环分组 同Site_ID分配相同编码

SQL Server 同站点固定1-7循环编码实现方案

核心逻辑

要满足「相同Site_ID编码完全一致、编码1~7按顺序循环分配」的要求,不需要逐行遍历,分两步处理即可:

  • 第一步:先把所有唯一的Site_ID去重,按照站点在数据中首次出现的先后顺序,生成从1开始的连续排名
  • 第二步:对连续排名做取模运算,转换为1~7区间的循环编码,再关联回原表,给所有对应站点的行统一赋值即可

可直接运行的代码

假设你的原始数据表名为Your_Table,替换成实际表名即可使用:

WITH Site_Seq_Tmp AS (
    -- 为每个唯一站点生成首次出现顺序的连续序号
    SELECT
        Site_ID,
        DENSE_RANK() OVER (
            -- 如果你有明确的排序依据(比如数据采集时间、自增ID),替换下面ORDER BY的字段即可
            ORDER BY MIN(Individual_ID), MIN(%%physloc%%)
        ) AS Site_Seq
    FROM Your_Table
    GROUP BY Site_ID
),
Site_Code_Tmp AS (
    -- 将连续序号转换为1-7循环的编码值
    SELECT
        Site_ID,
        CASE WHEN Site_Seq % 7 = 0 THEN 7 ELSE Site_Seq % 7 END AS Code_Assignment
    FROM Site_Seq_Tmp
)
-- 关联回原表输出最终结果
SELECT
    t.Individual_ID,
    t.Site_ID,
    sct.Code_Assignment
FROM Your_Table t
INNER JOIN Site_Code_Tmp sct 
    ON t.Site_ID = sct.Site_ID

注意事项

如果你有明确的业务排序规则(比如按站点首次上报时间、数据入库自增ID排序),请将代码中DENSE_RANK()窗口函数的ORDER BY子句替换为对应的排序字段,即可保证站点顺序和业务预期完全一致。你给出的样例中编码从3直接跳到5,是因为排序第4位的站点对应的行没有出现在你截取的样例片段中,上述代码会自动覆盖全量站点,编码循环逻辑不会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:51:23