Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在set子句中使用max函数修复update语句_Sql Server_Sql Server 2014 - Fatal编程技术网

Sql server 如何在set子句中使用max函数修复update语句

Sql server 如何在set子句中使用max函数修复update语句,sql-server,sql-server-2014,Sql Server,Sql Server 2014,我是sql server的新手,今天我想用trasco_quadri_imm表中字段oggetto_pratica的最大值从Utilitizi_oggetto表中设置一个空字段;所有这一切,而oggetto列中的值在两个表中都是相同的。在这种情况下,trasco_oggetti_pratica为空,将设置为226217。 这是我的trasco_quadri_imm桌子 OGGETTO OGGETTO_PRATICA 1429 20310 1429 20309 1429

我是sql server的新手,今天我想用trasco_quadri_imm表中字段oggetto_pratica的最大值从Utilitizi_oggetto表中设置一个空字段;所有这一切,而oggetto列中的值在两个表中都是相同的。在这种情况下,trasco_oggetti_pratica为空,将设置为226217。 这是我的trasco_quadri_imm桌子

OGGETTO   OGGETTO_PRATICA
1429      20310
1429      20309
1429      22110
1429      22142
1429      22111
1429      22143
1429      22144
1429      176644
1429      226216
1429      226217
还有我的utilizzi_oggetto桌子

OGGETTO     trasco_oggetto_pratica
1429         NULL
在我第一次尝试时,我已经尝试过了

update uo 
  set trasco_oggetto_pratica = max(oggetto_pratica)
  from trasco_quadri_imm tqi, utilizzi_oggetto uo
  where uo.oggetto = tqi.oggetto and uo.trasco_oggetto_pratica is null
当然,我不能在set语句中直接使用max函数,因此我将查询修改为:

update uo
set trasco_oggetto_pratica = tqi.maxop
from utilizzi_oggetto uo JOIN
    (select max(oggetto_pratica) as maxop from trasco_quadri_imm ) tqi
where uo.trasco_oggetto_pratica is null and uo.oggetto = tqi.oggetto
但它给了我一个错误:

无效的列名“oggetto”

我也试着把条件放在on子句中,但是我会在on这个词附近得到sintax的错误。
我不明白我错在哪里,我会提前感谢您的帮助。

这可以通过CTE、类似于
行数()
外部应用的窗口函数来实现,或者通过简单地使用派生表来实现,这对您来说可能不太容易混淆。这是您最初拥有的,但是您忘了从派生表中返回列
oggetto
,这就是为什么您不能
join
,并得到错误的原因

update uo
set uo.trasco_oggetto_pratica = tqi.OGGETTO_PRATICA
from utilizzi_oggetto uo
inner join 
    (select 
        max(OGGETTO_PRATICA) OGGETTO_PRATICA, 
        OGGETTO 
     from trasco_quadri_imm 
     group by OGGETTO) tqi on 
    tqi.OGGETTO = uo.OGGETTO 

我认为,无论选择什么,join Wuld都会选择所有字段;但是我想得太多了,我这样说是有道理的。谢谢你的帮助