如何为SQL Server中的相关行逐步分配批号?

问题描述 投票:0回答:1

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

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  

我想分配一个批号。请注意,前两行被分配了相同的编号,因为它们都是客户A和苹果。请注意,在第四行中,我们返回到具有客户A的苹果,但是它分配了下一个批号,而不是返回到批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
sql-server row-number autonumber
1个回答
0
投票

您可以使用LAG功能来确定其中一个字段是否更改。使用总和为更改编号:

WITH cte AS (
    SELECT *, CASE
        WHEN LAG(Customer) OVER (ORDER BY Time) = Customer AND LAG(Item) OVER (ORDER BY Time) = Item THEN 0
        ELSE 1
    END AS chg
    FROM t
)
SELECT *, SUM(chg) OVER (ORDER BY Time) AS batch
FROM cte
© www.soinside.com 2019 - 2024. All rights reserved.