Sql 从另一个表更新临时表编号n+1
我有一个我觉得应该是一个非常简单的更新任务,但我现在被以下问题困住了。我有一个临时表,我想从另一个表中将所有行的值更新为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 | +--
+--------+----+
| 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,并使用它来更新表格