我有一个不断增长的表格,我想要更新数据以进行整体计数。当更新发生时,插入的总计数数据可能已经包含在表中,并且还将添加新行。我不确定如何添加到前面的行并创建它们如果它们是新的,同时添加总和如果它们已经存在。例如
column1|column2|count
---------------------
A |A |5
A |B |7
B |A |4
我将从另一个表中添加以下数据,但第1/2行将始终更改:
{To be Added}
column1|column2|count
---------------------
A |A |10
B |A |2
C |A |5
所以决赛桌看起来像是:
column1|column2|count
--------------------
A |A |15
A |B |7
B |A |9
C |A |5
调查这个给了我使用SUM()
的解决方案,但由于列总是会改变,所以我遇到了问题。另外,这也可以更容易创建一个临时表来协作这些数据,而不是尝试在一个查询中更新这一切吗?
感谢任何帮助,
非常感谢,
约旦
答案 0 :(得分:0)
是的,您可以使用MERGE
语句:
Merge Into Table As Target
Using (Select Column1, Column2, Count From OtherTable) As Source
On (Target.Column1 = Source.Column1 And Target.Column2 = Source.Column2)
When Matched Then
Update Set Count = Target.Count + Source.Count
When Not Matched Then
Insert (Column1, Column2, Count)
Values (Source.Column1, Source.Column2, Source.Count)
;
这将根据其Column1和Column2值将数据从其他表合并到主表中。如果该值尚不存在,则它将INSERT
该记录。否则,它将UPDATE
表格中包含两个值的总和。
答案 1 :(得分:0)
您也可以借助这些查询以这种方式执行此操作。
--first update common rows
update t1
set t1.count=t1.count+t2.counts
select * from tbl1 t1 inner join
(select column1,column2,SUm(count) as counts from tbl2
group by column1,column2)
t2 on t1.column1=t2.column1 and t1.column2=t2.column2
--now insert remaining rows
insert into t1(column1,column2,count)
select t2.column1,t2.column2,t2.counts as count
from tbl1 t1 right join
(select column1,column2,SUm(count) as counts from tbl2
group by column1,column2) t2
on t1.column1=t2.column1 and t1.column2=t2.column2
where t1.column1 is NULL