我是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的错误。 我不明白我哪里出了问题,我将在此先感谢您的帮助。
答案 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