当前位置: 首页 > 面试题库 >

SQL更新记录,每次递增值从1开始

应和悦
2023-03-14
问题内容

我正在使用单个插入语句将一批记录添加到表中。我希望为每个新批次分配递增的数字,但每次都从1开始。

所以,如果我有

Batch    Name    IncementingValue
1        Joe     1
1        Pete    2
1        Andy    3
2        Sue     1
2        Mike    2
2        Steve   3

然后我添加两条记录(使用单个插入语句):

3        Dave
3        Paul

我如何对该表运行更新语句,以便Dave将被设置为1,而Paul将被设置为2。我不想使用游标。


问题答案:

排名功能ROW_NUMBER应该可以满足您的需求。您没有提及有关如何分配序列号的任何特定规则,因此我在这里使用了名称:

INSERT targetTable(Batch,Name,IncementingValue)
SELECT BatchId,
       Name,
       ROW_NUMBER() OVER (ORDER BY Name)
FROM sourceTable


 类似资料:
  • 每次我执行INSERT或UPSERT(ON CONFLICT UPDATE)时,每个表上的增量列都会增加之前的更新数量。 例如,如果我有这张表: 然后运行这些查询: 这是一个相当大的问题。我们运行的脚本每天处理100000个通知。这会在每一次插入之间产生大约10000行的间隙,所以我们可能从100行开始,但当我们达到1000行时,最后一行的主键ID值会自动增加到100000以上。 如果这种情况继续

  • 现在我们手上有了一个真实项目的 Git 仓库,并从这个仓库中取出了所有文件的工作拷贝。 接下来,对这些文件做些修改,在完成了一个阶段的目标之后,提交本次更新到仓库。 请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以

  • 问题内容: 我的查询 与表中的列我有10条记录,但我想将最新更新TIMESTAMP2为当前日期时间。 上面的查询抛出错误: 关键字“ TOP”附近的语法不正确。 问题答案:

  • 现在我们手上有了一个真实项目的 Git 仓库,并从这个仓库中取出了所有文件的工作拷贝。 接下来,对这些文件做些修改,在完成了一个阶段的目标之后,提交本次更新到仓库。 请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以

  • 问题内容: 我在PostgreSQL中有一个表,该表具有应该是唯一的ID列。但是,当前许多行(大约300万行)的ID为“ 1”。 我知道的: 总行数 ID列的当前最大值 ID(不正确)为“ 1”的行数 我需要的是一个查询,该查询将提取ID为“ 1”的所有行,并为其分配一个新ID,该ID自动递增,以便表中的每一行都具有唯一的ID。我希望它从开始,并为每行分配后续ID。 这是我得到的最接近的查询: 问

  • 问题内容: 我现在正在一家公司中使用全球DBA的无限智慧,他创建了一个表,该表将一个int用作ID字段,但是不会自动递增该数字。 我要从.Net传递一个表值参数,因为它随时有大约100或更多行的数据正在传递,并且我不想杀死该应用程序,破坏网络或SQL Server。 这是我的存储过程 我希望这会为我带来一些帮助,就像我对此进行测试时一样 这就是我回来的 (影响1行) (影响1行) (影响1行) (