我有一个要求,我将数据作为
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
我希望在对记录进行排名时考虑 DepartmentNumber 和 UserEmail 的组合。我在分区上使用 DENSE_RANK()来实现这一点,但不知怎的,我无法得到我想要的输出。我不确定我哪里出错了。有人可以帮助我吗
这是我使用的查询
SELECT StageID, DepartmentNumber, UserEmail
,DENSE_RANK() OVER (PARTITION BY DepartmentNumber, UserEmail
ORDER BY DepartmentNumber, UserEmail ASC) AS DRANK
FROM mytable
答案 0 :(得分:5)
我想你想要这个(JW提供的SQLFiddle):
SELECT StageID, DepartmentNumber, UserEmail
,DENSE_RANK() OVER (PARTITION BY DepartmentNumber
ORDER BY UserEmail ASC) AS DRANK
FROM mytable
Protip - 您永远不会在PARTITION BY
和ORDER BY
子句中使用相同的列。
如果我了解您的要求,那就是这样。我认为您希望每个部门行独立排名,并选择列作为电子邮件。如果这不是您的要求,则需要比
更明确我希望在对记录进行排名时考虑
DepartmentNumber
和UserEmail
的组合。
答案 1 :(得分:-1)
您可以使用此技术在任意数量的列上构建密集排名: 创建所需列的concat结果,并在结果列上创建密集排名。在您的情况下,它将如下所示:
SELECT StageID,DepartmentNumber,UserEmail, CONCAT(DepartmentNumber,' - ',UserEmail)为'DepAndEmail', DENSE_RANK()OVER(由DepAndEmail订购)AS DRANK 来自mytable