5

テーブルから 2 つの列を選択し、それぞれの値に int 値を割り当てたいと考えています。ただし、同じ値のすべての値について、最初の列 ID を同じにする必要があります。

2 番目の列については、各値にも番号を付けますが、最初の列で分割します。私はこの部分を理解しましたが、最初の部分を機能させることができません。

これが私が使用しているテストシナリオです。

DECLARE @TestTable as Table (Column1 char(1), Column2 char(1))

INSERT INTO @TestTable SELECT 'A','A' 
INSERT INTO @TestTable SELECT 'A','B' 
INSERT INTO @TestTable SELECT 'A','C' 
INSERT INTO @TestTable SELECT 'B','D' 
INSERT INTO @TestTable SELECT 'B','E' 
INSERT INTO @TestTable SELECT 'B','F' 
INSERT INTO @TestTable SELECT 'B','G' 
INSERT INTO @TestTable SELECT 'B','H' 
INSERT INTO @TestTable SELECT 'C','A' 
INSERT INTO @TestTable SELECT 'C','B' 
INSERT INTO @TestTable SELECT 'C','C' 


SELECT 
    Row_Number() OVER (Partition BY Column1 ORDER BY Column1) as Column1_ID,
    Column1,
    Row_Number() OVER (Partition BY Column1 ORDER BY Column1, Column2) as Column2_ID,
    Column2
FROM @TestTable

これを実行すると、Column2_ID の値は正しいのですが、Column1_ID の値を次のようにしたいと考えています。

Column1_ID  Column1  Column2_ID  Column2
1             A        1           A
1             A        2           B
1             A        3           C
2             B        1           D
2             B        2           E
2             B        3           F
2             B        4           G
2             B        5           H
3             C        1           A
3             C        2           B
3             C        3           C
4

1 に答える 1

10

別のランキング機能を使用するだけで、

dense_rank() OVER (ORDER BY Column1) as Column1_ID

http://msdn.microsoft.com/en-us/library/ms173825.aspx

SQL フィドル: http://www.sqlfiddle.com/#!6/d41d8/1832

于 2013-01-03T18:56:29.443 に答える