2012-06-20 12 views
30

Estoy trabajando en una consulta para SQL Server 2005 que necesita devolver datos con dos campos de "índice". El primer índice 't_index' debe incrementar cada vez que cambian la columna 'sombra', mientras que los segundos incrementos del índice dentro de la partición de los valores en la columna 'sombra':Incremento de número de fila en el grupo

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 

Para obtener la columna de la s_index estoy usando lo siguiente:

Select ROW_NUMBER() OVER(PARTITION BY [shade] ORDER BY [shade]) as s_index 

Mi pregunta es cómo conseguir el primer índice a sólo el mínimo de la subasta cuando el valor de los cambios de columna 'sombra'?

Respuesta

34

que se pueden lograr con el (DENSE_) función RANK:

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

Usted puede tratar de utilizar DENSE_RANK() para ello:

SELECT 
    shade, 
    s_index = ROW_NUMBER() OVER(PARTITION BY [shade] ORDER BY [shade]), 
    t_index = DENSE_RANK() OVER (ORDER BY [shade]) 
FROM dbo.YourTableNameHEre 

Da salida:

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

Esta voluntad no funciona si la sombra revierte a un valor anterior. – TomSW

+0

Y el conjunto de resultados heterogéneos ... ¿cómo? –

Cuestiones relacionadas