您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

T-SQL“ ense_rank”,每个级别具有最大行数

T-SQL“ ense_rank”,每个级别具有最大行数

您可以通过使用几个排名功能来实现。我们ROW_NUMBER()在中间和另一列中使用“平局决胜法”:

declare @maxRows int
set @maxRows = 5

; With InitialRanks as (
    select DENSE_RANK() OVER (ORDER BY type) as rnk,* from sys.objects
), OrderedRanks as (
    select (ROW_NUMBER() OVER (PARTITION BY rnk ORDER by object_id)-1)
            / @maxRows as rn,*
    from InitialRanks
)
select DENSE_RANK() OVER (ORDER BY rnk,rn),* from OrderedRanks

在这里,每个(最终)等级值最多只能显示5列。排名基于,type但我们object_id用作辅助列来确定行被授予特定排名的顺序。

原来,我使以上内容过于复杂- 不需要第一个CTE和第一个CTE,DENSE_RANK因为它可以有效地充当函数type列的代理ROW_NUMBER()-因此,为什么不直接使用该type列并简化操作:

declare @maxRows int
set @maxRows = 5

; With  OrderedRanks as (
    select (ROW_NUMBER() OVER (PARTITION BY type ORDER by object_id)-1)
            / @maxRows as rn,*
    from sys.objects
)
select DENSE_RANK() OVER (ORDER BY type,rn),* from OrderedRanks
SQLServer 2022/1/1 18:52:51 有336人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶