我有下表:
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
提前感谢您的帮助。
答案 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