如何对销售员在合同上的时间变化进行排名
How to rank salesman changing in the time on a contract
我是 sql 的初学者,我希望我的 post 会很清楚。
所以我有 1 个 table(见图片),我的 SalesMen 链接到合同。
我希望能够对合同中的每个 SalesMen 进行排名。
因此,如果今天在合同 001 上,我将 Martin 作为唯一的销售员,他的等级应该为“1”。
但如果有一天 Martin 被解雇了,而新来的人是 Frank。那么 Martin 将排在第 2 位,Frank 排在第 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
但它也不起作用:(
我不知道该怎么办
看来你只需要 dense_rank()
select *,dense_rank()over(partition by idContract order by idSalesMan) as rn
from table_name
你需要 DENSE_RANK()
:
SELECT t.*,
DENSE_RANK() OVER (PARTITION BY t.idContract ORDER BY t.idSalesMan) AS RankedSalesMan
FROM table t;
您只需要 idContract
在分区子句中。
我是 sql 的初学者,我希望我的 post 会很清楚。
所以我有 1 个 table(见图片),我的 SalesMen 链接到合同。 我希望能够对合同中的每个 SalesMen 进行排名。 因此,如果今天在合同 001 上,我将 Martin 作为唯一的销售员,他的等级应该为“1”。 但如果有一天 Martin 被解雇了,而新来的人是 Frank。那么 Martin 将排在第 2 位,Frank 排在第 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
但它也不起作用:(
我不知道该怎么办
看来你只需要 dense_rank()
select *,dense_rank()over(partition by idContract order by idSalesMan) as rn
from table_name
你需要 DENSE_RANK()
:
SELECT t.*,
DENSE_RANK() OVER (PARTITION BY t.idContract ORDER BY t.idSalesMan) AS RankedSalesMan
FROM table t;
您只需要 idContract
在分区子句中。