sql - 根据 Value 重置行 ID

标签 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   

最佳答案

这适用于 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

关于sql - 根据 Value 重置行 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148771/

相关文章:

mysql - 无法创建表

sql - Oracle ProC INSERT INTO VALUES ( (选择 ...) )

sql - 甲骨文 TO_DATE 不工作

Mysql LEFT-JOIN 和 Group By 的性能问题

math - md5对短字符串(有限数量的字符串)是否有任何唯一性保证?

sql - 数据库设计——它是否尊重 3rd NF?

sql - 从一个表中获取月份列表,并从另一个表中计算每个月份的列表

sql - oracle中select语句中的子查询是如何工作的

sql-server - CRYPT_GEN_RANDOM 是否足够独特?

asp.net - 一个小但恼人的问题——为什么 ASP.Net 将 SQL Server Guids 设置为小写?