Sql 如何向分组序列中的每个元素添加增量数字?

Sql 如何向分组序列中的每个元素添加增量数字?,sql,sql-server,row-number,data-partitioning,over-clause,Sql,Sql Server,Row Number,Data Partitioning,Over Clause,我面临一个问题,我有一个名为Group的表和一个名为Entry的表。Group表有一个主键Id。Entry表有一个主键Id,一个名为GroupId的表的Id外键。条目表还有一列权重。这个Weight是一个整数,它所做的只是告诉我排序权重,其中0显示在顶部 基本上,在设计数据库时,有人将此Weight字段设为空。现在,我需要检查并调整权重,以适应我们打算添加到条目表中的UNIQUE约束:UNQIUE(GroupId,Weight)。这可以防止两个条目条目在基本上属于同一组时具有相同的排序权重 什么

我面临一个问题,我有一个名为
Group
的表和一个名为
Entry
的表。
Group
表有一个主键
Id
Entry
表有一个主键
Id
,一个名为
GroupId
表的
Id
外键。
条目
表还有一列
权重
。这个
Weight
是一个整数,它所做的只是告诉我排序权重,其中0显示在顶部

基本上,在设计数据库时,有人将此
Weight
字段设为空。现在,我需要检查并调整
权重
,以适应我们打算添加到
条目
表中的
UNIQUE
约束:
UNQIUE(GroupId,Weight)
。这可以防止两个
条目
条目在基本上属于同一组时具有相同的排序权重

什么样的查询可以让我浏览所有现有数据,并在分组基础上对每个条目的
权重
列从0到N进行编号,其中N是
组中
条目
条目的数量?我想根据
条目的
Id
设置权重,以便给定
组中
条目的
Id
最低的
Id
获得最低的
权重


我想要一个大的ol'查询,它将遍历
表,连接所有
条目
条目,然后遍历它们并分配序列。但是,我不知道从哪里开始。

基本上你会使用

这是一个

希望这有帮助

CREATE TABLE Entry (Id INT PRIMARY KEY, GroupId INT, Weight INT);

CREATE TABLE [Group] (Id INT PRIMARY KEY, Label VARCHAR(10));

INSERT [Group] (Id, Label)
VALUES(1, 'test');


INSERT Entry (Id, GroupId, Weight)
VALUES(1,1, null)

INSERT Entry (Id, GroupId, Weight)
VALUES(2,1, null)

INSERT Entry (Id, GroupId, Weight)
VALUES(3,1, null)

UPDATE E
  SET E.WEIGHT = o.WEIGHTIS
--SELECT *
FROM Entry E
INNER JOIN (
    SELECT G.Id GID, E.Id EID, 
     ROW_NUMBER() OVER(PARTITION BY G.Id ORDER BY E.ID) WeightIs
    FROM [Group] G
    INNER JOIN Entry E
      ON G.Id = E.GroupId  
) o
ON o.GID = E.GroupID AND o.EID = E.Id

-SQL Server 2005+啊,这非常有帮助。非常感谢。多年来我一直坐在这里试图这样做,甚至从未使用过
OVER
子句。真漂亮!这确实让我们的测试人员感到高兴:)分区是这条语句中的关键角色,它在组Id更改时重置数字。:)是的,我想知道这是不是真的。经过进一步研究,它更有意义。