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
我们有一个 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