Cal*_*der 41 sql sql-server sql-server-2005
我正在研究SQL Server 2005的查询,需要返回带有两个"索引"字段的数据.每次'shade'列更改时,第一个索引't_index'应该递增,而第二个索引在'shade'列中的值的分区内递增:
t_index s_index shade
1 1 A
1 2 A
1 3 A
1 4 A
1 5 A
2 1 B
2 2 B
2 3 B
2 4 B
2 5 B
Run Code Online (Sandbox Code Playgroud)
要获取s_index列,我使用以下内容:
Select ROW_NUMBER() OVER(PARTITION BY [shade] ORDER BY [shade]) as s_index
Run Code Online (Sandbox Code Playgroud)
我的问题是如何让第一个索引只在'shade'列中的值发生变化时递增?
mar*_*c_s 50
您可以尝试使用DENSE_RANK()它:
SELECT
shade,
s_index = ROW_NUMBER() OVER(PARTITION BY [shade] ORDER BY [shade]),
t_index = DENSE_RANK() OVER (ORDER BY [shade])
FROM dbo.YourTableNameHEre
Run Code Online (Sandbox Code Playgroud)
给出输出:
shade s_index t_index
A 1 1
A 2 1
A 3 1
A 4 1
A 5 1
B 1 2
B 2 2
B 3 2
B 4 2
B 5 2
Run Code Online (Sandbox Code Playgroud)
Me.*_*ame 43
这可以通过(DENSE_)RANK函数完成:
DENSE_RANK() OVER(Order By [shade]) as t_index
Run Code Online (Sandbox Code Playgroud)