SQL Server中按指定分组大小为表记录分配组号并导入新表
你可以通过SQL Server的窗口函数ROW_NUMBER结合整数除法实现需求,具体实现语句如下:
-- 定义分组大小参数,可按需修改 DECLARE @GroupSize INT = 2; INSERT INTO TABLE2 (ID, COL1, COL2, counter) SELECT ID, Col1 AS COL1, COL2, -- 计算分组编号 (ROW_NUMBER() OVER (ORDER BY ID ASC) - 1) / @GroupSize + 1 AS counter FROM TABLE1 ORDER BY ID ASC;
逻辑说明
- 用
ROW_NUMBER() OVER (ORDER BY ID ASC)按照主键ID升序为每条记录生成连续行号 - 公式
(行号 - 1) / 分组大小 + 1利用SQL Server整数除法自动向下取整的特性,刚好实现每n条记录对应同一个counter值的需求,计算结果和你给出的预期完全匹配 - 如果需要自定义排序规则,只需要修改
OVER子句里的ORDER BY部分即可
注意事项
ID是主键自带索引,该方案对海量数据的处理效率很高,不会有额外的性能开销。
内容的提问来源于stack exchange,提问作者xiiiiiii
相关产品推荐
相关产品推荐

