gpt4 book ai didi

sql - 如何在 T-SQL 中对分区进行排名

转载 作者:行者123 更新时间:2023-12-01 10:23:38 24 4
gpt4 key购买 nike

我想为下面的数据给 CardId 和 InvoiceNo 的每个组合一个编号/等级

;WITH Test (CardId,InvoiceNo,Category,Amount) as 
(
SELECT '1001','3001','Fees',30
UNION ALL SELECT '1001','3001','Non-Fees',45
UNION ALL SELECT '1001','3001','Service Fees',55
UNION ALL SELECT '1002','3002','Fees',10
UNION ALL SELECT '1002','3002','Non-Fees',25
UNION ALL SELECT '1002','3002','Service Fees',10
UNION ALL SELECT '1003','3010','Fees',45
UNION ALL SELECT '1003','3010','Non-Fees',70


)

像这样

CardId  InvoiceNo   Amount  Rank
1001 3001 30 1
1001 3001 45 1
1001 3001 55 1
1002 3002 10 2
1002 3002 25 2
1002 3002 10 2
1003 3010 45 3
1003 3010 70 3

我用 Row_number()Rank() 尝试了下面的查询,但没有给我想要的结果。 rank() 将所有行排名为 1,row_number() 将每个组编号为 1、2、3。

SELECT CardId
,InvoiceNo
,Amount
,RANK() OVER (PARTITION BY CardID,InvoiceNo ORDER BY CardId) as RankNo

FROM Test

最佳答案

删除分区。 rank 函数查看分区,新分区重置排名。因此,它看到每个分区中的每条记录都并列第一。此外,您可能需要 dense_rank()

SELECT CardId
,InvoiceNo
,Amount
,DENSE_RANK() OVER (ORDER BY CardId, InvoiceNo) as RankNo
FROM Test
ORDER BY CardId, InvoiceNo, Amount

fiddle :

http://sqlfiddle.com/#!18/0f0c2/7

关于sql - 如何在 T-SQL 中对分区进行排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48756159/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com