2012-06-20 6 views
30

Я работаю над запросом SQL Server 2005, которому необходимо вернуть данные с двумя полями «индекс». Первый индекс «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 

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

ответ

34

Это может быть достигнуто с помощью (DENSE_) функции RANK:

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

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

Это будет не работает, если оттенок возвращается к предыдущему значению. – TomSW

+0

И гетерогенный результирующий набор .. как? –

Смежные вопросы