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更改时重置数字。:)是的,我想知道这是不是真的。经过进一步研究,它更有意义。