59

2 つの「インデックス」フィールドを含むデータを返す必要がある SQL Server 2005 のクエリに取り組んでいます。最初のインデックス 't_index' は 'shade' 列が変更されるたびに増加し、2 番目のインデックスは 'shade' 列の値のパーティション内で増加します。

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

私の質問は、「シェード」列の値が変更されたときにのみ最初のインデックスをインクリメントする方法です。

4

2 に答える 2

69

DENSE_RANK()これは次の関数で実現できます。

  DENSE_RANK() OVER(Order By [shade]) as t_index
于 2012-06-20T09:20:54.077 に答える
66

そのために使用することができます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
于 2012-06-20T09:21:00.227 に答える