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

时间:2012-05-16 03:24:28

标签: sql sql-server database sql-server-2008 tsql

我有下表:

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”字段。下面是我应用语句后表格的样子。我不知道如何实现这一目标。我正在使用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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分: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