Sql 从另一个表更新临时表编号n+1

Sql 从另一个表更新临时表编号n+1,sql,sql-server,sql-update,Sql,Sql Server,Sql Update,我有一个我觉得应该是一个非常简单的更新任务,但我现在被以下问题困住了。我有一个临时表,我想从另一个表中将所有行的值更新为n+1;例如: 人: +--------+----+ | Name | N | +--------+----+ | A | 1 | | A | 5 | | A | 2 | | B | 8 | +--------+----+ @临时人员: +--------+--------+ | Name | NPlus1 | +--

我有一个我觉得应该是一个非常简单的更新任务,但我现在被以下问题困住了。我有一个临时表,我想从另一个表中将所有行的值更新为n+1;例如:

人:

+--------+----+
| Name   | N  |
+--------+----+
| A      | 1  |
| A      | 5  |
| A      | 2  |
| B      | 8  |
+--------+----+
@临时人员:

+--------+--------+
| Name   | NPlus1 |
+--------+--------+
| A      | NULL   |
| B      | NULL   |
+--------+--------+
我需要更新@temp_PersonTable,以便NPlus1列中的值从Person表中的N列派生,类似于:

UPDATE @temp_table 
SET NPlus1 = ((SELECT MAX(N) FROM Person WHERE Person="A") + 1)
WHERE @temp_table.Person = Person.Name

UPDATE @temp_table 
SET NPlus1 = ((SELECT MAX(N) FROM Person WHERE Person="B") + 1)
WHERE @temp_table.Person = Person.Name
因此,结果将是:

+--------+--------+
| Name   | NPlus1 |
+--------+--------+
| A      |     6  |
| B      |     9  |
+--------+--------+

我是否需要为每个案例编写单独的更新语句?我想知道如何编写一个SQL脚本来亲自迭代每个不同的名称并进行更新,目前我认为从一个单独的应用程序使用foreach循环更新表会更容易完成这项任务。

您只需要首先将值作为子查询的一部分获取,然后连接到该子查询


您只需要首先将值作为子查询的一部分获取,然后将其加入子查询


您可以使用单个语句

update #temp_Person
set NPlus1 = (select MAX(N) + 1 from Person where Name = #temp_Person.Name)

您可以使用单个语句

update #temp_Person
set NPlus1 = (select MAX(N) + 1 from Person where Name = #temp_Person.Name)

只需创建一个名为N+1、按名称分组的CTE,并使用它来更新表格只需创建一个名为N+1、按名称分组的CTE,并使用它来更新表格