【发布时间】:2021-04-28 04:36:59
【问题描述】:
我们有一个包含几列的 SQL 表,其中一列是 Item。它具有如下所示的各种值。
| Item |
|---|
| Item1 |
| 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 的值。
想要的输出是
| 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 cursor slice sql-server-2014 row-number