gpt4 book ai didi

sql - sql - 设置顺序值而不循环/游标

转载 作者:行者123 更新时间:2023-12-02 04:10:50 30 4
gpt4 key购买 nike

我需要在数据表中设置一个非唯一标识符。这在组内是连续的,即。对于每个组,ID 应从 1 开始,并以 1 为增量递增,直到该组的最后一行。

下表对此进行了说明。 “新 ID”是我需要填充的列。

Unique ID  Group ID  New ID
--------- -------- ------
1 1123 1
2 1123 2
3 1124 1
4 1125 1
5 1125 2
6 1125 3
7 1125 4

有没有办法在不循环/游标的情况下做到这一点?如果循环/游标是唯一的方法,那么最有效的代码是什么?

谢谢

最佳答案

一种方法是使用ROW_NUMBER() OVER(PARTITION BY ... ORDER BY ...)UPDATE...FROM带有 subquery 的声明在 FROM clause .

update MyTable set NewID = B.NewID
from
MyTable as A
inner join (select UniqueID, ROW_NUMBER() over (partition by GroupID order by UniqueID) as NewID from MyTable) as B on B.UniqueID = A.UniqueID
  • MSDN has a good sample to get you started:
  • 您需要在 FROM 子句中使用子查询才能使用 Windows 函数 (Row_Index())
  • Partition By 告诉服务器何时重置行号
  • Order By 告诉服务器以哪种方式对组的 NewID 进行排序

关于sql - sql - 设置顺序值而不循环/游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6906316/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com