How to renumber rows by groups

岁酱吖の 提交于 2019-12-13 05:46:53

问题


I need to renumber rows by group (Class, Color, Type) sequences in column SeqNo from:

Class  | Color | Type | SeqNo
Animal | Brown | Terr | 1
Animal | Brown | Aqua | 3
Animal | White | Terr | 3
Plant  | Green | Aqua | 2
Plant  | Green | Aqua | 2
Plant  | Green | Aqua | 2
Platn  | Green | Terr | 9

to:

Class  | Color | Type | SeqNo
Animal | Brown | Terr | 1
Animal | Brown | Aqua | 2
Animal | White | Terr | 1
Plant  | Green | Aqua | 1
Plant  | Green | Aqua | 1
Plant  | Green | Aqua | 1
Plant  | Green | Terr | 2

How to do that, please?


回答1:


You need to use DENSE_RANK() function to number your sequence and the CTE for the intermediary result set.

INSERT INTO @t VALUES
('Animal', 'Brown', 'Terr', 1),
('Animal', 'Brown', 'Aqua', 3),
('Animal', 'White', 'Terr', 3),
('Plant', 'Green', 'Aqua', 2),
('Plant', 'Green', 'Aqua', 2),
('Plant', 'Green', 'Aqua', 2),
('Plant', 'Green', 'Terr', 9)

;WITH cte AS(
SELECT *, DENSE_RANK() OVER (PARTITION BY Class, Color ORDER BY Class, Color, Type) AS NewSeq 
FROM @t 
) 
UPDATE t1
SET t1.SeqNo = t2.NewSeq
FROM @t AS t1
INNER JOIN cte AS t2 ON t1.Class = t2.Class AND t1.Color = t2.Color AND t1.Type = t2.Type

SELECT * FROM @t

The output:

Class   Color   Type    SeqNo
Animal  Brown   Terr    2
Animal  Brown   Aqua    1
Animal  White   Terr    1
Plant   Green   Aqua    1
Plant   Green   Aqua    1
Plant   Green   Aqua    1
Plant   Green   Terr    2


来源:https://stackoverflow.com/questions/25503151/how-to-renumber-rows-by-groups

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!