Подтвердить что ты не робот

Увеличение номера строки в группе

Я работаю над запросом SQL Server 2005, который должен возвращать данные с двумя полями "index". Первый индекс "t_index" должен увеличиваться каждый раз при изменении столбца "тень" , в то время как второй индекс увеличивается в разделе значений в столбце "тень" :

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

Мой вопрос заключается в том, как получить первый индекс только при добавлении значения в столбце "тень" ?

4b9b3361

Ответ 1

Это можно выполнить с помощью функции (DENSE_) RANK:

  DENSE_RANK() OVER(Order By [shade]) as t_index

Ответ 2

Вы можете попробовать использовать 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