sqlserver2008代码逻辑问题

image.png只对连续达百做排序,如果中间遇到没有达百的情况结果为0 ,下次在遇到从1 开始排序

SQL wangjiaojiao 发布于 2025-1-2 15:05
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
CD20160914Lv8专家互助
发布于2025-1-2 15:15(编辑于 2025-1-2 15:38)

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

image.png

  • wangjiaojiao wangjiaojiao(提问者) SUM(CASE WHEN m2.Value < 1 THEN 1 ELSE 0 END) OVER (ORDER BY m1.Id ROWS UNBOUNDED PRECEDING) AS ResetGroup 没有识别出来 报错了
    2025-01-02 15:21 
  • CD20160914 CD20160914 回复 wangjiaojiao(提问者) 换一下吧。。这个2008可以用了。
    2025-01-02 15:24 
  • CD20160914 CD20160914 回复 wangjiaojiao(提问者) 上面语句修改了。
    2025-01-02 15:24 
  • wangjiaojiao wangjiaojiao(提问者) 回复 CD20160914 可以是可以 但是遇到第一天达成<100的时候 排序有点问题,方便加一下联系方式嘛
    2025-01-02 15:29 
  • CD20160914 CD20160914 回复 wangjiaojiao(提问者) 上面的语句重新修改了。再看吧。
    2025-01-02 15:38 
  • 2关注人数
  • 78浏览人数
  • 最后回答于:2025-1-2 15:38
    请选择关闭问题的原因
    确定 取消
    返回顶部