首页 > 解决方案 > SQL Server 2008:按 id 重新排序组

问题描述

我正在尝试将一系列数字(1 到 n)添加到按 ID 列分组的列中。例如,我有一个这样的数据集:

ID      Name    Description Order
---------------------------------
11049   Sanchez A           5
11049   Sanchez B           4
11049   Sanchez C           5
11049   Sanchez D           7
11049   Sanchez E           6
11049   Sanchez F           2
11049   Sanchez G           1
11049   Sanchez H           3
46947   Mendez  I           1
46947   Mendez  J           1
46947   Mendez  K           2

请注意,对于 ID 为 的行,11049Order 列中有两个 5。同样对于 ID 为 的行,46947Order 列中有两个 1。我需要确保每个 ID 集只有不同的数字。例如,对于 ID 为46947的行,描述值为 的行I的列 Order 值为 1。值为 的列描述J应为 2。值为 的列描述K应具有一列订单值为 3。生成的表应如下所示:

ID      Name    Description Order
---------------------------------
11049   Sanchez A           1
11049   Sanchez B           2
11049   Sanchez C           3
11049   Sanchez D           4
11049   Sanchez E           5
11049   Sanchez F           6
11049   Sanchez G           7
11049   Sanchez H           8
46947   Mendez  I           1
46947   Mendez  J           2
46947   Mendez  K           3

数字排序的顺序并不重要,但我只需要确保从数字 1 开始的每组 ID 都有一个不同的数字。

我想过如何使用 T-SQL 来做到这一点,但我什至不知道从哪里开始。

标签: sqlsql-servertsql

解决方案


对于您的数据,您似乎需要row_number()功能:

select *, row_number() over (partition by id order by [Description]) as [order]
from table t;

推荐阅读