【问题标题】:SQL table : update column with batchName based on the total count of rowsSQL 表:根据总行数使用 batchName 更新列
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多