2012-06-20 176 views
30

我正在研究需要使用兩個'索引'字段返回數據的SQL Server 2005查詢。第一指數「t_index」應該增加了「蔭」列的變化,而值的分區中的第二個指標的增量在「色光」列每次:在組上增加行號

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列我使用以下內容:

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

我的問題是如何讓第一個索引只在「陰影」列中的值發生變化時遞增?

回答

34

可與(DENSE_)RANK函數來完成:

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

你可以嘗試使用DENSE_RANK()爲:

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

給出輸出:

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

這將如果陰影恢復到先前的值,則不起作用。 – TomSW

+0

和heteregeneous結果集..如何? –