SQL代码根据类别向记录添加数字

jan*_*dor 0 sql t-sql database sql-server sql-server-2008

我有下表:

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试运行一个sql语句,它将通过在每次特定用户标识重复时从1开始添加一个数字来转换"Sub"字段.下面是我应用语句后表格的样子.我不知道如何实现这一目标.我正在使用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
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

Joh*_*wey 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
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)