You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中为分组扩展row_number功能?

更简洁高效的实现方案

嘿,你的需求是给每个唯一的VAL1分配连续递增的序号,然后输出对应的所有行对吧?你的当前实现是可行的,但确实有更简洁、性能更优的方式——直接用DENSE_RANK()窗口函数就能一步到位,不需要额外的CTE和表关联操作!

优化后的代码

DECLARE @TABLE1 TABLE ( VAL1 VARCHAR(2), VAL2 VARCHAR(2) )
INSERT INTO @TABLE1 VALUES ('A', 'X'), ('A', 'Y'), ('A', 'Z'), ('B', 'X'), ('B', 'Y'), ('C', 'X'), ('D', 'X')

SELECT 
    DENSE_RANK() OVER(ORDER BY VAL1) AS RW,
    VAL1,
    VAL2
FROM @TABLE1
ORDER BY RW, VAL2 -- 确保输出顺序和你预期的一致

为什么这个方法更好?

  • 代码更简洁:省去了创建CTE分组、再关联原表的步骤,逻辑一目了然,维护起来更方便
  • 性能更优:避免了表关联操作,减少了查询的执行开销,尤其是在数据量较大时,这个优势会更明显
  • 结果完全符合预期:DENSE_RANK()会按照VAL1的排序,给每个唯一的VAL1分配连续的序号,不会出现间隔,和你想要的输出完全匹配

对比你的原方法,本质上都是给每个VAL1分配序号,但DENSE_RANK()直接在原表上计算窗口函数,省去了中间的分组和关联步骤,是更直接高效的实现方式。

内容的提问来源于stack exchange,提问作者razielx4crazy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:07:06