2012-06-20 25 views
30

Sto lavorando a una query per SQL Server 2005 che deve restituire i dati con due campi 'indice'. Il primo indice 't_index' deve incrementare ogni volta che cambia la colonna 'ombra', mentre il secondo incrementi di indice all'interno della partizione dei valori nella colonna 'ombra':Incremento numero riga sul gruppo

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 

Per ottenere la colonna s_index Sto usando il seguente:

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

la mia domanda è come ottenere il primo indice solo quando il valore di incremento nei cambiamenti colonna 'ombra'?

risposta

34

che può essere realizzato con la (DENSE_) funzione RANGO:

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

Si può provare a utilizzare DENSE_RANK() per questo:

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

Dà uscita:

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

Questa volontà non funziona se l'ombra ritorna ad un valore precedente. – TomSW

+0

E un insieme eterogeneo di risultati .. come? –