0

次の表があります。

UserID      Sub     EID 
1       TA      1
1       TA      6
1       TA      2
2       TA      7
2       GB      7
3       TA      6
3       TA      1
3       GB      7
3       MX      7
3       MX      6

特定のユーザー ID の重複があるたびに 1 から始まる番号を追加して、「サブ」フィールドを変換する SQL ステートメントを実行しようとしています。以下は、ステートメントを適用した後のテーブルの外観です。これがどのように達成できるかわかりません。SQL Server 2008 を使用しています。

UserID      Sub     EID
1       TA1     1
1       TA2     6
1       TA3     2
2       TA1     7
2       GB1     7
3       TA1     6
3       TA2     1
3       GB1     7
3       MX1     7
3       MX2     6

よろしくお願いします。

4

1 に答える 1

5

を使用しROW_NUMBER()OVERます。この例では、テーブル変数を使用しています。

DECLARE @t TABLE(UserID INT, Sub VARCHAR(5), EID INT);
INSERT INTO @t VALUES
(1,'TA',1)
, (1,'TA',6)
, (1,'TA',2)
, (2,'TA',7)
, (2,'GB',7)
, (3,'TA',6)
, (3,'TA',1)
, (3,'GB',7)
, (3,'MX',7)
, (3,'MX',6);

SELECT UserID
, Sub=Sub+CAST(ROW_NUMBER()OVER(PARTITION BY UserID, Sub ORDER BY UserID) AS VARCHAR(30))
, EID
FROM @t

結果:

UserID      Sub                                 EID
----------- ----------------------------------- -----------
1           TA1                                 1
1           TA2                                 6
1           TA3                                 2
2           GB1                                 7
2           TA1                                 7
3           GB1                                 7
3           MX1                                 7
3           MX2                                 6
3           TA1                                 6
3           TA2                                 1
于 2012-05-16T03:33:41.047 に答える