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

时间:2016-05-06 16:18:35

标签: sql sql-server sql-update

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

人:

RouteData

@temp_Person:

+--------+----+
| Name   | N  |
+--------+----+
| A      | 1  |
| A      | 5  |
| A      | 2  |
| B      | 8  |
+--------+----+

我需要更新@temp_PersonTable,以便NPlus1列中的值派生自Person表中的N列,如:

+--------+--------+
| Name   | NPlus1 |
+--------+--------+
| A      | NULL   |
| B      | NULL   |
+--------+--------+

结果将是:

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

我是否需要为每个案例编写单独的UPDATE语句?我想知道如何编写一个SQL脚本来遍历每个DISTINCT Name in Person并进行更新,并且目前认为这个任务更容易从单独的应用程序使用foreach循环更新表。

2 个答案:

答案 0 :(得分:4)

您只需先将值作为子查询的一部分,然后JOIN即可。

UPDATE tp
SET
    NPlus1 = SQ.max_N + 1
FROM
    @temp_Person TP
INNER JOIN (SELECT Name, MAX(N) AS max_N FROM Person GROUP BY Name) SQ ON
    SQ.Name = TP.Name

答案 1 :(得分:1)

您可以使用单一陈述

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