SQL 表:根据行的总数更新带有 batchName 的列

问题描述

我们有一个包含几列的 sql 表,其中一列是 Item。它具有如下所示的各种值。

项目
项目 1
Item2
Item3
Item4
Item5
Item6
Item7
Item8
Item9
Item10
Item11
Item12

我需要根据表中的总行数将这个表分成不同的集合。 允许的最大组数有所不同,但例如,这里我将其用作 6。

所以,如果表中有 12 行,我需要将 batch1 分配给前 2 行,将 batch2 分配给第 3/4 行,依此类推。如果有 14 行,最后 4 行可以有 batch6(因为 14 / 6 = 每批大约 2 行)

到目前为止我尝试的是在 Item 上使用 row_number 以便我得到一个唯一的行列表(Item 在这个表中将是唯一的,在这个例子中它将是 1 到 12)。然后编写基于游标的逻辑来循环计数,并根据因子 6,设置 BatchName 的值。

期望的输出

项目 批次名称
项目 1 第一批
Item2 第一批
Item3 第二批
Item4 第二批
Item5 第三批
Item6 第三批
Item7 第 4 批
Item8 第 4 批
Item9 第 5 批
Item10 第 5 批
Item11 第 6 批
Item12 第 6 批

这里最好的选择是什么?有什么建议可以产生这种类型的输出吗?

非常感谢。

解决方法

只需使用算术。在 SQL Server 中,您可以使用:

select t.*,( (row_number() over (order by item) + 1) / 2 ) as batch_number
from t