Увеличение номера строки в группе
Я работаю над запросом для SQL Server 2005, который должен возвращать данные с двумя полями "индекс". Первый индекс 't_index' должен увеличиваться каждый раз, когда изменяется столбец 'shade', тогда как второй индекс увеличивается в пределах раздела значений в столбце '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
Чтобы получить столбец s_index, я использую следующее:
Select ROW_NUMBER() OVER(PARTITION BY [shade] ORDER BY [shade]) as s_index
Мой вопрос: как получить первый индекс, который будет увеличиваться только при изменении значения в столбце "тень"?
2 ответа
Решение
Это можно сделать с помощью функции (DENSE_)RANK:
DENSE_RANK() OVER(Order By [shade]) as t_index
Вы можете попробовать использовать 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
Дает вывод:
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