【问题标题】:I want to assign lot numbers to particular rows in a table我想将批号分配给表中的特定行
【发布时间】:2015-06-12 08:41:57
【问题描述】:

我的表结构是

BatchID|BatchName|StartDate|NoOfTrainee|LotNo

我想根据 StartDate 对表格进行排序并相应地分配批号。

当学员人数达到最少 100 人时,将分配第一个批号。 例如:

BatchId|BatchName|StartDate|NoOfTrainee|LotNo
1|  mum1|   2015-06-01| 25| NULL
2|  del2|   2015-06-01| 30| NULL
3|  cal1|   2015-06-02| 35| NULL
4|  bang1|  2015-06-02| 20| NULL
5|  bang2|  2015-06-03| 40| NULL
6|  del1|   2015-06-05| 30| NULL
7|  mum2|   2015-06-06| 25| NULL

第 1、2、3、4 行将分配到批次 1,因为它们的总和达到 100。 接下来的 100 名学员将分配到批号 2

【问题讨论】:

    标签: sql sql-server stored-procedures sql-server-2012


    【解决方案1】:

    您可以使用ROW_NUMBERSUM OVER() 来实现您所需要的。

    SELECT ROW_NUMBER()OVER(ORDER BY StartDate,BatchName) BatchId,
    BatchName, StartDate, NoOfTrainee,
    CEILING(SUM(NoOfTrainee) OVER(ORDER BY StartDate,BatchName) / 100.0) as LotNo
    FROM BatchTable
    

    SQL Fiddle

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2017-10-03
      • 2021-12-10
      • 2020-08-30
      相关资源
      最近更新 更多