我需要生成一个基于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
答案 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