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

use*_*780 1 sql-server dense-rank

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

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
Run Code Online (Sandbox Code Playgroud)

我想得到像这样的输出

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
Run Code Online (Sandbox Code Playgroud)

我希望在对记录进行排名时考虑DepartmentNumberUserEmail的组合.我在分区上使用DENSE_RANK()来实现这一点,但不知怎的,我无法得到我想要的输出.我不确定我哪里出错了.有谁可以帮助我

这是我使用的查询

SELECT StageID, DepartmentNumber, UserEmail
        ,DENSE_RANK() OVER (PARTITION BY DepartmentNumber, UserEmail
         ORDER BY DepartmentNumber, UserEmail ASC) AS DRANK 
   FROM mytable 
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 5

我想你想要这个(JF提供的SQLFiddle):

SELECT StageID, DepartmentNumber, UserEmail
        ,DENSE_RANK() OVER (PARTITION BY DepartmentNumber
         ORDER BY UserEmail ASC) AS DRANK 
   FROM mytable 
Run Code Online (Sandbox Code Playgroud)

Protip - 你永远不希望在PARTITION BYORDER BY子句中都有相同的列.

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

我希望在对记录进行排名时考虑组合DepartmentNumberUserEmail予以考虑.