2012-06-20 10 views
30

Tôi đang làm việc trên truy vấn cho SQL Server 2005 cần trả về dữ liệu với hai trường 'chỉ mục'. Chỉ số đầu tiên 't_index' nên tăng mỗi khi 'bóng' thay đổi cột, trong khi gia tăng chỉ số thứ hai trong phân vùng của các giá trị trong 'bóng' cột:Số hàng tăng thêm trên nhóm

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 

Để có được cột s_index Tôi đang sử dụng như sau:

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

Câu hỏi của tôi là làm cách nào để chỉ số đầu tiên chỉ tăng khi giá trị trong cột 'bóng' thay đổi?

Trả lời

34

Điều đó có thể được thực hiện với sự (DENSE_) hàm RANK:

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

Bạn có thể cố gắng sử dụng DENSE_RANK() cho rằng:

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

Cung cấp đầu ra:

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

chí này không hoạt động nếu bóng râm hoàn nguyên về giá trị trước đó. – TomSW

+0

Và bộ kết quả heteregeneous .. làm thế nào để? –