行ID重置基于值

时间:2017-11-07 01:54:06

标签: sql group-by uniqueidentifier row-number rowid

我需要生成一个基于ID的存储,并在事务类型= 200的任何时候重置。下面是我的数据的示例。

StoreID     TransactionID   
A               200 
A               300
A               45
A               1
A               200
A               23
A               2000
A               200
A               1   

现在,我需要填充它。 每次显示200时重置的行号。 一个事务可以有多个ID,也可以有不同数量的事务。然而,200是BeginingOftransaction,所以我需要能够获得一个ID并重置200.

Rn  StoreID     TransactionID   
1   A               200 
2   A               300
3   A               45
4   A               1
1   A               200
2   A               23
3   A               2000
1   A               200
2   A               1   

2 个答案:

答案 0 :(得分:1)

试试这段代码。如果事务id等于200

,这将重置为1
    SELECT 
    (CASE
        WHEN TransactionID = 200 THEN @rn := 1
        ELSE @rn := @rn + 1
    END) AS RN, StoreID, TransactionID 
    FROM TableName, (SELECT @rn := 0);

答案 1 :(得分:1)

这适用于SQL Server:

希望这正是你想要的。试试这个:

DECLARE @Tab TABLE(StoreID VARCHAR(1),id int)

INSERT INTO @Tab VALUES('A',200),('A',89),('A',89),('A',98),('A',200),('A',1),('A',3),('A',200)

SELECT SUM(1) OVER(PARTITION BY D.RES ORDER BY RN)RN,StoreID,ID
from(
    SELECT id,StoreID, RN
        ,SUM(CASE WHEN id=200 THEN 1 ELSE 0 END) OVER(ORDER BY (SELECT RN))Res
    FROM (
        SELECT id,StoreID,ROW_NUMBER() OVER(ORDER BY(SELECT NULL))RN
        FROM @Tab)D
    )D

结果是:

RN  StoreID ID
1   A       200
2   A       89
3   A       89
4   A       98
1   A       200
2   A       1
3   A       3
1   A       200
相关问题