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
