不改变原有数据的排序 实现图片上的效果

11.png11.png/

FineReport Ccc 发布于 2024-1-11 11:11 (编辑于 2024-1-11 14:59)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
用户k6280494Lv6资深互助
发布于2024-1-11 11:14

你还是说一下原始需求吧,这玩意怎么给你转成sql

最佳回答
0
CD20160914Lv8专家互助
发布于2024-1-11 11:16(编辑于 2024-1-11 14:45)

WITH CTE AS (  

    SELECT   

        column_name,  

        ROW_NUMBER() OVER (ORDER BY column_name) AS rn,  

        LAG(column_name) OVER (ORDER BY column_name) AS prev_value,  

        LEAD(column_name) OVER (ORDER BY column_name) AS next_value  

    FROM your_table_name  

)  

SELECT   

    column_name,  

    CASE   

        WHEN column_name = 'z' AND prev_value = 'z' THEN rn + 1  

        WHEN column_name = 'z' AND next_value = 'z' THEN rn  

        ELSE rn  

    END AS new_rank  

FROM CTE  

ORDER BY new_rank

如果你不是z你就换成数字0

我们使用LAG()LEAD()函数来获取当前行之前的值和下一行的值。然后,我们使用CASE语句来确定是否需要重新开始计数。如果当前行的值是'z'并且前一行的值也是'z',则将序号增加1。如果当前行的值是'z'并且下一行的值也是'z',则保持当前序号不变。否则,序号保持不变。

  • Ccc Ccc(提问者) 很谢谢 但貌似不行 我补充了一张图片
    2024-01-11 14:59 
最佳回答
0
CovidLv3高级互助
发布于2024-1-11 11:17
最佳回答
0
华莉星宸Lv7高级互助
发布于2024-1-11 14:38

是这个意思

用层次坐标

image.png

image.png

  • Ccc Ccc(提问者) 我知道层次坐标可以 但现在是想用sql实现嘞
    2024-01-11 14:39 
最佳回答
0
LazySheepLv7高级互助
发布于3 天前(编辑于 3 天前

WITH Numbered AS (   

 SELECT        

  a,      

  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1 AS RowNum    

  FROM     tab

)

SELECT      

a,    

  RowNum % 4 AS LoopNumber 

FROM   

   Numbered;

a改成你的字段 tab改成你的表

  • 5关注人数
  • 405浏览人数
  • 最后回答于:3 天前
    请选择关闭问题的原因
    确定 取消
    返回顶部