我有一张桌子
ID value 1 100 2 101 2 444 3 501
也是TableB
ID Code 1 2
现在,如果表A中存在ID = 2,我想填充表B的col =代码。对于多个值,获取最大值。否则将其填充为“ 123”。现在这是我使用的:
if exists (select MAX(value) from #A where id = 2) BEGIN update #B set code = (select MAX(value) from #A where id = 2) from #A END ELSE update #B set code = 123 from #B
我确定BEGIN; END或IF EXIST; ELSE中存在一些问题。基本上,如果IF部分中的select语句存在,我想绕过else部分,反之亦然。例如,如果IF = part的select语句为:
(select MAX(value) from #A where id = 4)
它应该只填充123,coz ID = 4不存在!
编辑
我想补充一下您的IF陈述似乎无效的原因。当您进行EXISTS汇总时,总会是true。即使ID不存在,它也会返回一个值。当然是NULL,但返回了它。相反,请执行以下操作:
IF
EXISTS
true
ID
NULL
if exists(select 1 from table where id = 4)
然后您将进入语句ELSE部分IF。
ELSE
现在,这是一个更好的基于集合的解决方案:
update b set code = isnull(a.value, 123) from #b b left join (select id, max(value) from #a group by id) a on b.id = a.id where b.id = yourid
这具有能够在整个表而不是单个ID上运行的优点。