如何使用完全连接和分组依据在 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
我有两个表 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