如何根据合同对销售人员的变化进行排名

问题描述 投票:0回答:2

我是sql的初学者,我希望我的帖子很清楚。

所以我有一张桌子(见图片),我的SalesMen链接到合同。我希望能够根据合同对每个SalesMen进行排名。因此,如果今天在合同001上我有马丁作为唯一的SalesMan他应该有'1'作为排名。但是如果有一天马丁被解雇了,新人就是弗兰克。然后马丁将排名第2,弗兰克排名第1。

例:

idContract    idSalesMan    DateLoad
001           Jean          1900-01-01
001           Jean          1900-02-02
001           Jean          1900-03-03
002            Martin       1900-01-01
002            Martin       1900-02-02
002            Frank        1900-03-03

我想要的结果:

idContract    idSalesMan    DateLoad       RankedSalesMan
001           Jean          1900-01-01     1
001           Jean          1900-02-02     1
001           Jean          1900-03-03     1
002            Martin       1900-01-01     2
002            Martin       1900-02-02     2
002            Frank        1900-03-03     1

我做了什么:第一次尝试: select idContract,IdSalesMan, Row_number() over (partition by IDContract , IDsALESmAN order by IDsALESmAN )但它给了我一个常规1,2,3,4

然后我试过了

select
x.*
,case when x.PrecedingSalesMan = x.SalesMan then
Row_number() over (partition by IDContract , IDsALESmAN order by IDsALESmAN ) 
from(

select idContract,IdSalesMan,

,LAG(CodeAgent,1) over (order by NoContract, idCustomers, kCode_Agent) as PrecedingSalesMan) x

但它既不起作用:(

我不知道该怎么办

sql sql-server rank
2个回答
2
投票

看来你只需要dense_rank()

select *,dense_rank()over(partition by idContract order by idSalesMan) as rn
from table_name

1
投票

你需要DENSE_RANK()

SELECT t.*,
       DENSE_RANK() OVER (PARTITION BY t.idContract ORDER BY t.idSalesMan) AS RankedSalesMan
FROM table t;

在分区子句中只需要idContract

© www.soinside.com 2019 - 2024. All rights reserved.