gpt4 book ai didi

sql - DENSE_RANK() 无重复

转载 作者:行者123 更新时间:2023-12-02 22:25:57 25 4
gpt4 key购买 nike

这是我的数据:

| col1 | col2 | denserank | whatiwant |
|------|------|-----------|-----------|
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 1 |
| 3 | 2 | 2 | 2 |
| 4 | 2 | 2 | 2 |
| 5 | 1 | 1 | 3 |
| 6 | 2 | 2 | 4 |
| 7 | 2 | 2 | 4 |
| 8 | 3 | 3 | 5 |

这是我到目前为止的查询:

SELECT col1, col2, DENSE_RANK() OVER (ORDER BY COL2) AS [denserank]
FROM [table1]
ORDER BY [col1] asc

我想要实现的是,每当 col2 的值发生变化时(即使该值本身被重用),我的密集排名列就会递增。我实际上无法按密集排序的列进行排序,所以这是行不通的)。有关示例,请参阅 whatiwant 列。

有没有办法用DENSE_RANK()来实现这一点?或者有其他选择吗?

最佳答案

我会用这样的递归 cte 来做到这一点:

declare @Dept table (col1 integer, col2 integer)

insert into @Dept values(1, 1),(2, 1),(3, 2),(4, 2),(5, 1),(6, 2),(7, 2),(8, 3)

;with a as (
select col1, col2,
ROW_NUMBER() over (order by col1) as rn
from @Dept),
s as
(select col1, col2, rn, 1 as dr from a where rn=1
union all
select a.col1, a.col2, a.rn, case when a.col2=s.col2 then s.dr else s.dr+1 end as dr
from a inner join s on a.rn=s.rn+1)
col1, col2, dr from s

result:

col1 col2 dr
----------- ----------- -----------
1 1 1
2 1 1
3 2 2
4 2 2
5 1 3
6 2 4
7 2 4
8 3 5

仅当您的 col1 值不连续时才需要 ROW_NUMBER。如果是,您可以立即使用递归 cte

关于sql - DENSE_RANK() 无重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41949621/

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