如何使用完全连接和分组依据在 SQL 的该列中不输入任何值的情况下重复停止相同值的乘法和

How to stop the multiplying sum of same value reptedly without entering any values in that column in SQL using full join and group by

我有两个表 T1 和 T2 以及两个表 C1 和 C2 中的两个相同的列.C2 其他列值自动相乘。我想停止这个乘法请帮助我

我的查询是

Select T1.C1,(Sum(T1.C2)-Sum(T2.C2)) 
from T1 
Full join T2 on T1.C1=T2.C1 
group by T1.C1;

当我在 T1.C2 中输入值 1000 并在 T2.C2 中输入值 100 时,减法就发生了,我的输出是

___________ 
|C1   C2.  |
|          |
|A   900   |
|          |

但是当我在 C1.C2 中再次输入 1000 时,输出出现错误

____________
|C1  C2.   |
|          |
|A   1800  |
|          |

预期产量为 1900

我认为这会满足您的需求

select
    (select sum(t1.C1) from (values (1000), (1000)) T1(C1))-
    (select sum(t2.C1) from (values (100)) T2(C1));

结果

1900

这样做:

select T1.C1,
       sum(T1.C2) - (Select isnull(sum(T2.C2), 0) From T2 where T1.C1 = T2.C1)
From T1
group by T1.C1

输出:

A  1900

如果您想在两个 table 中都允许不匹配的行,那么 full join 是可行的方法。我建议首先在子查询中使用 pre-aggregating 以避免行相乘:

select 
    coalesce(t1.c1, t2.c1) c1, 
    coalesce(t1.c2, 0) - 
    coalesce(t2.c1, 0) c2
from (select c1, sum(c2) sum_c2 from t1) t1
full join (select c1, sum(c2) sum_c2 from t2) on t1.c1 = t2.c1
group by coalesce(t1.c1, t2.c1)

如果您想要来自两个 table 的行,则使用 inner join,或者如果您想要来自一个 table 的所有行并且全部匹配,则使用 left join另一个行:

select 
    t1.c1,
    t1.c2 - coalesce(t2.c1, 0) c2
from (select c1, sum(c2) sum_c2 from t1) t1
left join (select c1, sum(c2) sum_c2 from t2) on t1.c1 = t2.c1
group by t1.c1