sql server2008可以用
WITH RecursiveRank AS (
-- 基础情况:选择第一行的数据
SELECT
Id,
Value,
CASE WHEN Value < 1 THEN 0 ELSE 1 END AS Rank,
CASE WHEN Value < 1 THEN 1 ELSE 0 END AS ResetFlag
FROM MyTable
WHERE Id = 1
UNION ALL
-- 递归部分:处理后续行的数据
SELECT
m.Id,
m.Value,
CASE
WHEN m.Value < 1 THEN 0
ELSE r.Rank + 1
END AS Rank,
CASE
WHEN m.Value < 1 THEN 1
ELSE 0
END AS ResetFlag
FROM MyTable m
INNER JOIN RecursiveRank r ON m.Id = r.Id + 1
)
SELECT
Id,
Value,
Rank
FROM RecursiveRank
ORDER BY Id
