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

如何在同一查询中用ROW_NUMBER()和RANK()为唯一物品生成唯一整数?

用ROW_NUMBER()/RANK()实现统一ItemRow需求

我已经知道怎么用临时表实现这个需求,但为了学习,想搞懂如何同时用ROW_NUMBER()和RANK()来完成。

原始数据

Item    Desc       Qty  Row
ItemA   ItemDescA  10   1
ItemA   ItemDescA  20   2
ItemB   ItemDescB  30   3
ItemB   ItemDescB  40   4
ItemB   ItemDescB  50   5
ItemC   ItemDescC  60   6

期望结果

Item    Desc       Qty  Row  ItemRow
ItemA   ItemDescA  10   1    1
ItemA   ItemDescA  20   2    1
ItemB   ItemDescB  30   3    2
ItemB   ItemDescB  40   4    2
ItemB   ItemDescB  50   5    2
ItemC   ItemDescC  60   6    3

现有代码

select
    so.*
    , row_number() over(order by so.[Item], so.Qty) row -- 生成上面的Row列
    -- 想在这里加一行用ROW_NUMBER()或RANK()的语句实现需求
from
    #StockOrdersData so

解决方案

你只需要添加一行窗口函数语句即可,两种方式都能实现每个唯一Item对应统一的ItemRow:

方式1:用RANK()

select
    so.*
    , row_number() over(order by so.[Item], so.Qty) row
    , rank() over(order by so.[Item]) ItemRow -- 新增这行
from
    #StockOrdersData so

方式2:用DENSE_RANK()

select
    so.*
    , row_number() over(order by so.[Item], so.Qty) row
    , dense_rank() over(order by so.[Item]) ItemRow -- 新增这行
from
    #StockOrdersData so

说明

  • RANK()和DENSE_RANK()在这里效果一致,因为每个Item都是连续分组,没有间隔的排名情况。
  • 两者都会根据Item的排序,为相同的Item分配同一个排名数字,不同Item按顺序递增,完全匹配你的期望结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:56:04