Ron*_*Dev 4 t-sql sql-server-2012 rank
我有样本数据:
CREATE TABLE #T (Name varchar(5), GroupId int NULL)
INSERT INTO #T (Name) VALUES
('A'),
('A'),
('A'),
('B'),
('B'),
('C'),
('D'),
('D')
Name GroupId
----- -----------
A NULL
A NULL
A NULL
B NULL
B NULL
C NULL
D NULL
D NULL
Run Code Online (Sandbox Code Playgroud)
如何按名称对数据进行分组,并在其后写入 groupId(顺序,可能是身份)?这就是我想要得到的:
Name GroupId
----- -----------
A 1
A 1
A 1
B 2
B 2
C 3
D 4
D 4
Run Code Online (Sandbox Code Playgroud)
要分组的表有大约 15m 行。如何更好地做到这一点?谢谢!
;WITH cteA
AS(SELECT Name,GroupID,
DENSE_RANK () OVER(ORDER BY Name) AS New_GroupID
FROM #T)
UPDATE cteA
SET GroupID = New_GroupID
Run Code Online (Sandbox Code Playgroud)
现在,根据您的系统,这可能需要几秒钟或更长时间。您可以拆分更新,分块进行。类似 AG 的东西,然后从 G 到 M ......你可以在 DENSE_RANK 中添加类似的东西MaxGroupID + DENSE_RANK () OVER(ORDER BY Name) AS New_GroupID
归档时间: |
|
查看次数: |
6806 次 |
最近记录: |