Sql server 如何在set子句中使用max函数修复update语句
我是sql server的新手,今天我想用trasco_quadri_imm表中字段oggetto_pratica的最大值从Utilitizi_oggetto表中设置一个空字段;所有这一切,而oggetto列中的值在两个表中都是相同的。在这种情况下,trasco_oggetti_pratica为空,将设置为226217。 这是我的trasco_quadri_imm桌子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
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都会选择所有字段;但是我想得太多了,我这样说是有道理的。谢谢你的帮助