如何在set子句中使用max函数修复更新语句

时间:2019-01-17 14:50:34

标签: sql-server sql-server-2014

我是sql-server的新手,今天我想在utilizzi_oggetto表中设置一个空字段,并使用表trasco_quadri_imm中的oggetto_pratica字段的最大值。所有这一切,而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的错误。 我不明白我哪里出了问题,我将在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这可以通过CTE,row_number()outer apply之类的窗口函数来完成,也可以通过简单地使用派生表来完成,这可能会使您感到困惑。这就是您原来的样子,但是您忘记了也要从派生表中返回列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