请随时更改或建议我更改标题,以更好地表达我要问的问题。
我有一个查询,给出以下结果:
select
Customer.customer_id,
Transaction.amount
From Customer inner join Transaction on Customer.customer_id = Transcation.coustomer_id
结果:
customer_id| amount
01456 |50
01456 |100
01456 |400
01456 |0
01963 |50
01963 |100
01963 |221
01963 |0
现在,我想添加一个优先级字段,为我提供1、2或3的优先级。数值越小,优先级越高。注意:我想用文字“ Negative”代替0。排名金额期望为0。
这就是我想要的。
customer_id| amount| priority
01456| 50| 3
01456| 100| 2
01456| 400| 1
01456| 0| Negative
01963| 50| 3
01963| 100| 2
01963| 221| 1
01963| 0| Negative
这可以实现吗?非常感谢您的帮助。
答案 0 :(得分:2)
像ROW_NUMBER()
这样的窗口函数非常适合:
SELECT c.customer_id,
t.amount,
ROW_NUMBER() over (PARTITION BY customer_id ORDER BY amount desc) priority
FROM Customer c
JOIN [Transaction] t on c.customer_id = t.customer_id
partition by
重置每个唯一customer_id
的编号,而order by
决定对行进行编号的方向和顺序。
答案 1 :(得分:0)
使用row_number()
或rank()
:
select customer_id, amount,
row_number() over (partition by customer_id order by amount desc) as priority
from t;