Sql server 如何在SQL Server中以增量方式向相关行分配批号?

Sql server 如何在SQL Server中以增量方式向相关行分配批号?,sql-server,tsql,window-functions,row-number,Sql Server,Tsql,Window Functions,Row Number,如果要在两个字段中的任何一个发生更改时增加批次号,如何在时间顺序表中增量分配批次号?这是原始表格: Customer Item Time A Apples 1:00 PM A Apples 1:10 PM A Oranges 1:20 PM A Apples 1:30 PM B Oranges 1:40 PM A Apples 1:50 PM

如果要在两个字段中的任何一个发生更改时增加批次号,如何在时间顺序表中增量分配批次号?这是原始表格:

Customer  Item     Time    
A         Apples   1:00 PM  
A         Apples   1:10 PM  
A         Oranges  1:20 PM  
A         Apples   1:30 PM  
B         Oranges  1:40 PM  
A         Apples   1:50 PM  
C         Apples   2:00 PM  
我想做的是分配一个批号。请注意,前两行分配了相同的编号,因为它们都是Customer A和Apple。请注意,在第4行中,我们返回到客户A的Apple,但它被分配了下一个批号,而不是返回到第1批:

Customer  Item     Time     Batch
A         Apples   1:00 PM  1
A         Apples   1:10 PM  1
A         Oranges  1:20 PM  2
A         Apples   1:30 PM  3
B         Oranges  1:40 PM  4
A         Apples   1:50 PM  5
C         Apples   2:00 PM  6
您可以使用LAG函数来确定其中一个字段是否更改。使用运行总和对更改进行编号:

以cte为例 选择*,大小写 当LAGCustomer OVER ORDER BY Time=客户且LAGItem OVER ORDER BY Time=项目时,则为0 其他1 以chg结束 从t 选择*,按时间将订单汇总为批次 来自cte 您可以使用LAG函数来确定其中一个字段是否更改。使用运行总和对更改进行编号:

以cte为例 选择*,大小写 当LAGCustomer OVER ORDER BY Time=客户且LAGItem OVER ORDER BY Time=项目时,则为0 其他1 以chg结束 从t 选择*,按时间将订单汇总为批次 来自cte