将一行字段设置为另外两个字段的乘法

Gab*_*Gab 3 sql t-sql sql-server

我有一个这样的SQL表结构

Id    A     B    C   D
1     1     5    6   25
2     2     10   5   25
3     3     7    4   25
4     1     6    5   26
5     2     10   5   26
6     3     8    3   26
Run Code Online (Sandbox Code Playgroud)

我想编写一个脚本,它将更新A = 3行中的所有B&C列,其中A = 1和A = 2的乘法值(对于D列的相同值)

所以结果应该是

Id    A     B    C   D
1     1     5    6   25
2     2     10   5   25
3     3     50   30  25
4     1     6    5   26
5     2     10   5   26
6     3     60   25  26

我怎样才能在SQL中编写这样的代码?

i-o*_*one 7

一种可能的方法是将表连接两次:

update T3
set
    T3.B = T1.B * T2.B,
    T3.C = T1.C * T2.C
from [Table] T3
    join [Table] T1 on T1.A = 1 and T1.D = T3.D
    join [Table] T2 on T2.A = 2 and T2.D = T3.D
where
    T3.A = 3
Run Code Online (Sandbox Code Playgroud)