Sql server 2005 是否从子查询更新多个列?

Sql server 2005 是否从子查询更新多个列?,sql-server-2005,Sql Server 2005,如何在以下T-SQL语句中避免重复的子查询: update r set column1=(select top 1 max(column1) from region r2 where (overlapping test conditions)), column2=(select top 1 max(column2) from region r2 where (overlapping test conditions)) from region r 基本上,我有一个包含矩形区域的表。对于每

如何在以下T-SQL语句中避免重复的子查询:

update r set
  column1=(select top 1 max(column1) from region r2 where (overlapping test conditions)),
  column2=(select top 1 max(column2) from region r2 where (overlapping test conditions))
from region r
基本上,我有一个包含矩形区域的表。对于每个重叠区域,我需要将一些列设置为该重叠区域的聚合值

谢谢

编辑:我在此处添加了过度简化的重叠条件:

(r.left >= r2.left and r.left < r2.right) or (r.right <= r2.right and r.right > r.left)
(r.left>=r2.left和r.left
关键是:r和r2都将在子查询中引用。对于普通表表达式来说,这似乎是一个完美的情况,但我不知道如何对每条记录使用它

UPDATE Region
SET
  Region.Column1 = r.Column1
  Region.Column2 = r.Column2
FROM
  Region
INNER JOIN 
 (
   SELECT
        Column1,
        Column2
   FROM Region
   WHERE (your condition here)
  ) r ON r.ID = Region.ID
我刚注意到MAX()aggs。对不起,我第一次没看到。 你可能需要有两个内部连接才能工作

所以拿着我所有的为专栏1做吧

INNER JOIN (SELECT MAX(Column1) FROM ... WHERE ... ) r ON r.ID = Region.ID 
然后是第二个内部连接

INNER JOIN (SELECT MAX(Column2) FROM ... WHERE ...)r2 ON r2.ID = Region.ID   
您的更新将成为

UPDATE Region
SET Region.Column1 = r1.Column1,
    Region.Column2 = r2.Column2
FROM Region
INNER JOIN
(SELECT MAX(Column1) as Column1 FROM ... WHERE ... ) r ON r.ID = Region.ID
INNER JOIN
(SELECT MAX(Column2) As Column2 FROM ... WHERE ... ) r2 ON r2.ID = Region.ID

重叠测试条件是什么,它们之间有关联吗?你能用一个子查询吗?@astander:想象一堆r.left>r2.left和r.top>r2.top。。。;一些你不想重复的东西。你能在问题中加上这些where子句吗。如果它们都是相同的,这将改变我们看待问题的方式。@john:dup子查询是我试图避免的。此外,我更新了我原来的问题,以显示where子句可能是什么样子。在这样的子查询中,似乎无法接受该条件(无法绑定多部分标识符“r.left”)。好的,您在开始时没有提到,对不起。让我再看一看,你想避免用两个SELECT来更新两个不同的字段吗?我不认为你可以,因为在两个不同的字段上使用MAX。聚合使它复杂化,否则我会得到一个答案对不起。在查询的最后一个版本中缺少ID上的“group by”