SQL table : 根据总行数用 batchName 更新列

SQL table : update column with batchName based on the total count of rows

我们有一个 SQL table,只有几列,其中一列是项目。它具有如下所示的各种值。

Item
Item1
Item2
Item3
Item4
Item5
Item6
Item7
Item8
Item9
Item10
Item11
Item12

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

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

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

期望的输出是

Item BatchName
Item1 Batch1
Item2 Batch1
Item3 Batch2
Item4 Batch2
Item5 Batch3
Item6 Batch3
Item7 Batch4
Item8 Batch4
Item9 Batch5
Item10 Batch5
Item11 Batch6
Item12 Batch6

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

非常感谢。

就用算术吧。在SQL服务器中,您可以使用:

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