Iは、2つのテーブルを有する:表2T-SQLの更新1の参加:N
id fee1 fee2
1 0.00 0.00
2 0.00 0.00
:
表1を
id fee_no fee
1 A 10.00
1 B 20.00
2 A 80.00
2 B 90.00
SQL:
update a
set a.fee1 = isnull(a.fee1, 0)
+ (case when b.fee_no ='A'
then cast(isnull(b.fee, 0) as decimal(30, 2))
else 0 end),
a.fee2 = isnull(a.fee2, 0)
+ (case when b.fee_no ='B'
then cast(isnull(b.fee, 0) as decimal(30,2))
else 0 end)
from table1 a
inner join table2 b on a.id = b.id
このSQLを実行した後、fee2
はtable1
のfee1
のみが更新されます。最後に、2つのSQL文を使用してそれぞれfee1
とfee2
を更新しました。
しかし、なぜこのSQL文は機能しませんか?ここで
は、create table文である:
create table table1(
id int null,
fee1 dec(30,2) null,
fee2 dec(30,2) null
)
insert into table1 (id,fee1,fee2)
select 1,0,0 union
select 2,0,0
create table table2(
id int null,
fee_no varchar(10) null,
fee dec(30,2) null
)
insert into table2 (id,fee_no,fee)
select 1,'A',10 union
select 1,'B',20 union
select 2,'A',80 union
select 2,'B',90
をあなたの更新は 'ケースc.fee_no = 'B''を読み取りますが、あなたのクエリに割り当てられたテーブルの別名' C 'がありませんか? – Raj
申し訳ありませんが、それは事務的なエラーです。私はそれを修正しました – zhangsir199
あなたのSQLを投稿できますか?私は 'fee2'の2番目の' update'が間違った値を更新したと確信しました – Raj