SQL Server中为相同Values值生成分组编号的技术求助
解决SQL Server中按相同值生成分组编号的问题
你需要为相同Values值的行生成统一的分组编号,之前使用DENSE_RANK()时错误地按SortOrder排序,导致每个行得到独立的连续编号,而非按值分组的编号。以下是两种可行的解决方案:
方法一:按值首次出现的顺序生成分组号(通用方案)
这种方法不受Values的字符排序影响,严格按照每个值第一次出现的SortOrder顺序分配分组编号,适配所有场景:
SELECT [Values], SortOrder, DENSE_RANK() OVER (ORDER BY MIN(SortOrder) OVER (PARTITION BY [Values])) AS [Group] FROM your_table WHERE [Values] IS NOT NULL ORDER BY SortOrder;
方法二:按值的字符顺序生成分组号(适用于值顺序与出现顺序一致的场景)
如果你的Values字符排序顺序和它们在结果集中出现的顺序完全一致,可以直接简化为:
SELECT [Values], SortOrder, DENSE_RANK() OVER (ORDER BY [Values]) AS [Group] FROM your_table WHERE [Values] IS NOT NULL ORDER BY SortOrder;
核心逻辑说明
PARTITION BY [Values]将相同Values的行划分为同一组,MIN(SortOrder)取每组中最小的SortOrder,代表该值首次出现的位置。- 外层的
DENSE_RANK()按这个首次出现的位置排序,就能为同一Values的行分配相同的连续分组编号,不会出现跳号。
内容的提问来源于stack exchange,提问作者Ashish Sharma
相关产品推荐
相关产品推荐

