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

如何在SQL Server中平均分配无归属合同给合同经理?

SQL Server合同批量分配解决方案

一、统计待分配合同数量

执行以下SQL语句,快速获取ContractManagerID为NULL的合同总数:

SELECT COUNT(*) AS 待分配合同数量
FROM Contract
WHERE ContractManagerID IS NULL;

二、批量循环分配合同

最优实现方式是利用窗口函数生成序号结合取模运算,实现按ContractManagerID顺序的均匀循环分配,具体代码及逻辑如下:

WITH 待分配合同 AS (
    SELECT 
        ContractID,
        -- 按ContractID升序生成连续序号,保证分配顺序稳定
        ROW_NUMBER() OVER (ORDER BY ContractID) AS 合同序号
    FROM Contract
    WHERE ContractManagerID IS NULL
),
经理列表 AS (
    SELECT 
        ContractManagerID,
        -- 按ContractManagerID排序生成经理序号
        ROW_NUMBER() OVER (ORDER BY ContractManagerID) AS 经理序号,
        -- 动态获取经理总数,适配后续人员变动
        COUNT(*) OVER () AS 经理总数
    FROM ContractManager
)
UPDATE c
SET c.ContractManagerID = m.ContractManagerID
FROM Contract c
JOIN 待分配合同 dc ON c.ContractID = dc.ContractID
JOIN 经理列表 m ON (dc.合同序号 - 1) % m.经理总数 + 1 = m.经理序号;

逻辑说明

  • (dc.合同序号 - 1) % m.经理总数 + 1:通过取模实现循环匹配,比如6个合同、3位经理时,合同序号1-3对应经理1-3,序号4-6再次对应经理1-3,确保每位经理分到2个合同;
  • 窗口函数ROW_NUMBER()保证分配顺序固定,不会出现随机分配的情况;
  • 动态获取经理总数,后续经理数量变化时无需修改代码即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 04:21:03