SQL - 添加到现有行

时间:2015-08-10 19:55:25

标签: sql sql-server count sum

我有一个不断增长的表格,我想要更新数据以进行整体计数。当更新发生时,插入的总计数数据可能已经包含在表中,并且还将添加新行。我不确定如何添加到前面的行并创建它们如果它们是新的,同时添加总和如果它们已经存在。例如

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()的解决方案,但由于列总是会改变,所以我遇到了问题。另外,这也可以更容易创建一个临时表来协作这些数据,而不是尝试在一个查询中更新这一切吗?
感谢任何帮助,
非常感谢,
约旦

2 个答案:

答案 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