Create table tbl_test(
col1 nvarchar(255),
col2 nvarchar(255),
sum1 int,
sum2 int,
sum3 int)
Create table tbl_test2(
col1 nvarchar(255),
col2 nvarchar(255),
sum1 int,
sum2 int,
sum3 int)
Insert into tbl_test (col1, col2, sum1, sum2, sum3)
select 'a','a', 1 , 1 ,1
union all
select 'a','b', 2,2,2
union all
select 'a','c', 3,3,3
Insert into tbl_test2 (col1, col2, sum1, sum2, sum3)
select 'a','a', 1 , 1 ,1
union all
select 'a','b', 2,2,2
union all
select 'b','a', 3,3,3
/ ** * 1002
Я хотел бы, чтобы моя процедура получила новую таблицу tbl_result:
tbl_result:
col1 | col2 | sum1 | sum2 | sum3
'a' 'a' 2 2 2 || 1 + 1
'a' 'b' 4 4 4
'a' 'c' 3 3 3
'b' 'a' 3 3 3
* /
- Так что я хотел бы провести какое-то воссоединение между двумя столами.
- Метод, который я нашел до сих пор:
- Шаг 1: найти общие значения
Update a
set a.sum1 = a.sum1 + b.sum1,
a.sum2 = a.sum2 + b.sum2,
a.sum3 = a.sum3 + b.sum3
from tbl_test a join tbl_test2 b on a.col1 = b.col1 and a.col2 = b.col2
- Шаг 2: найти новые значения
Insert into tbl_test (col1, col2 ,sum1,sum2,sum3)
select
b.col1,
b.col2,
b.sum1,
b.sum2,
b.sum3
from tbl_test a right join tbl_test2 b on a.col1 = b.col1 and a.col2 = b.col2
where a.col1 is null and a.col2 is null
select * from tbl_test
К сожалению, этого недостаточно. Если в моих таблицах 1 000 000 записей, объединение, вероятно, не является оптимальным решением. Есть идеи?