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

我正在尝试运行一个 sql 语句,该语句将通过添加一个从 1 开始的数字来转换“Sub”字段,每次特定用户 ID 有重复项。下面是我应用该语句后表格的外观。我不知道如何实现这一点。我正在使用 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 回答