2012-06-20 9 views
30

Pracuję nad zapytaniem dla programu SQL Server 2005, który musi zwrócić dane z dwoma polami "indeksu". Pierwszego indeksu „t_index” powinno zwiększyć za każdym razem, gdy „cień” zmiany kolumn, natomiast sekundowych odstępach indeks w ramach podziału wartości w „cieniu” kolumny:Zwiększenie liczby wierszy w grupie

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 

dostać kolumnę s_index używam następujące:

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

Moje pytanie brzmi: w jaki sposób dostać się do pierwszego indeksu tylko wtedy, gdy wartość przyrostu w „cieniu” zmian kolumn?

Odpowiedz

34

To może być osiągnięte z (DENSE_) Funkcja rank:

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

Można spróbować użyć DENSE_RANK() za to:

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

Daje wyjściowy:

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

Będzie nie działa, jeśli cień powraca do poprzedniej wartości. – TomSW

+0

I heteregeneous result set .. jak? –

Powiązane problemy