私はtableAを持っています:
ID value
1 100
2 101
2 444
3 501
またTableB
ID Code
1
2
TableAにID = 2が存在する場合、テーブルBのcol = codeを追加します。複数の値の場合は、最大値を取得してください。それ以外の場合は「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、人口ID = 4が存在しないことを移植する必要があります!
EDIT
IF
ステートメントが機能しないように見える理由を付け加えたいと思います。集約に対してEXISTS
を実行すると、常にtrue
になります。 ID
が存在しなくても値を返します。確かに、それはNULL
ですが、それを返します。代わりに、これをしてください:
if exists(select 1 from table where id = 4)
ELSE
ステートメントのIF
部分に移動します。
今、これはより良い、セットベースの解決策です:
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ではなくテーブル全体で実行できるという利点があります。
これを試して:
Update TableB Set
Code = Coalesce(
(Select Max(Value)
From TableA
Where Id = b.Id), 123)
From TableB b