2012-06-20 28 views
30

İki "dizin" alanıyla veri döndürmesi gereken SQL Server 2005 için bir sorgu üzerinde çalışıyorum.Artış Satır Numarası Grupta

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 sütun almak için kullanıyorum: İlk index 't_index' 'gölge' sütunundaki değerlerin bölüm içinde ikinci indeks artışlarla iken 'gölge' sütunu değişiklikleri, her zaman artmalıdır aşağıdaki:

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

sorum sadece artım ilk indeksi nasıl olduğunda 'gölge' sütunu değer değişip? (DENSE_) RANK fonksiyonu ile gerçekleştirilebilir

cevap

34

:

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

Bunun için DENSE_RANK() kullanmayı deneyebilirsiniz:

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

Bu irade:

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

çıktı verir Gölge bir önceki değere geri dönerse çalışmaz. – TomSW

+0

Ve heteregeneous sonuç kümesi .. nasıl yapılır? –