在 SQL Server 中使用 Dense_Rank 对具有排名的列进行排名组合

Posted

技术标签:

【中文标题】在 SQL Server 中使用 Dense_Rank 对具有排名的列进行排名组合【英文标题】:Ranking combination of columns with rank using Dense_Rank in SQL Server 【发布时间】:2013-01-27 11:11:01 【问题描述】:

我有一个要求,我将数据作为

StageID         Department Number       UserEmail

732                60012                user1@testing.com
733                60012                user1@testing.com
734                60012                user1@testing.com
735                60012                user2@testing.com
736                60012                user2@testing.com
737                60013                user3@testing.com   
738                60013                user3@testing.com

我想得到这样的输出

StageID         Department Number       UserEmail       DRank

732              60012              user1@testing.com   1
733              60012              user1@testing.com   1
734              60012              user1@testing.com   1
735              60012              user2@testing.com   2
736              60012              user2@testing.com   2
737              60013              user3@testing.com   1
738              60013              user3@testing.com   1

我希望在对记录进行排名时考虑 DepartmentNumberUserEmail 的组合。我在分区上使用 DENSE_RANK() 来实现这一点,但不知何故我无法获得我想要的输出。我不确定我哪里出错了。任何人都可以在这方面帮助我

这是我使用的查询

SELECT StageID, DepartmentNumber, UserEmail
        ,DENSE_RANK() OVER (PARTITION BY DepartmentNumber, UserEmail
         ORDER BY DepartmentNumber, UserEmail ASC) AS DRANK 
   FROM mytable 

【问题讨论】:

【参考方案1】:

我想你想要这个(SQLFiddle 由 JW 提供):

SELECT StageID, DepartmentNumber, UserEmail
        ,DENSE_RANK() OVER (PARTITION BY DepartmentNumber
         ORDER BY UserEmail ASC) AS DRANK 
   FROM mytable 

Protip - 你永远不想在 PARTITION BYORDER BY 子句中使用相同的列。

如果我了解您的要求,那就是这样。我认为您希望每个部门的行独立排名,并选择列作为电子邮件排名。如果这不是你的要求,你需要比

更明确

我希望在对记录进行排名时考虑DepartmentNumberUserEmail 的组合。

【讨论】:

以上是关于在 SQL Server 中使用 Dense_Rank 对具有排名的列进行排名组合的主要内容,如果未能解决你的问题,请参考以下文章

Query (SQL Server 2008 Express) 在 SQL Server Management Studio 中有效,但在 Delphi 中使用 ADODB 无效

sql server中如何实现在异地访问数据库

在 sql server 中,使用整数变量构建动态 sql

如何使用sql server数据库中的标量值函数

在 sql 适配器过程中使用 WL.Server.invokeSQLStatement 返回的结果集

Azure SQL Server 备份:需要使用 ARM 模板在 Azure SQL Server 备份中取消注册容器和重新转移数据库