SQL - 添加到现有行
SQL - Add to existing rows
我有一个不断增长的 table,我想在其中更新数据以进行总体计数。当更新发生时,正在插入的总计数数据行可能已经包含在 table 中,并且还将添加新行。我不确定如何添加到前面的行并创建它们(如果它们是新的)同时添加总计(如果它们已经存在)。例如
column1|column2|count
---------------------
A |A |5
A |B |7
B |A |4
我将从另一个 table 添加以下数据,但 column1/2 将始终发生变化:
{To be Added}
column1|column2|count
---------------------
A |A |10
B |A |2
C |A |5
所以最后的 table 看起来像 :
column1|column2|count
--------------------
A |A |15
A |B |7
B |A |9
C |A |5
对此的研究为我提供了使用 SUM()
的解决方案,但由于列总是会发生变化,所以这就是我遇到问题的地方。此外,创建暂存 table 以作为此数据进行协作而不是尝试在一个查询中更新所有内容是否也更容易?
感谢任何帮助,
非常感谢,
约旦
是的,您可以为此使用 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 的值将来自其他 table 的数据合并到您的主 table 中。如果该值不存在,它将 INSERT
记录。否则,它将 UPDATE
table 与两个值的总和。
您也可以借助这些查询以这种方式完成。
--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
我有一个不断增长的 table,我想在其中更新数据以进行总体计数。当更新发生时,正在插入的总计数数据行可能已经包含在 table 中,并且还将添加新行。我不确定如何添加到前面的行并创建它们(如果它们是新的)同时添加总计(如果它们已经存在)。例如
column1|column2|count
---------------------
A |A |5
A |B |7
B |A |4
我将从另一个 table 添加以下数据,但 column1/2 将始终发生变化:
{To be Added}
column1|column2|count
---------------------
A |A |10
B |A |2
C |A |5
所以最后的 table 看起来像 :
column1|column2|count
--------------------
A |A |15
A |B |7
B |A |9
C |A |5
对此的研究为我提供了使用 SUM()
的解决方案,但由于列总是会发生变化,所以这就是我遇到问题的地方。此外,创建暂存 table 以作为此数据进行协作而不是尝试在一个查询中更新所有内容是否也更容易?
感谢任何帮助,
非常感谢,
约旦
是的,您可以为此使用 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 的值将来自其他 table 的数据合并到您的主 table 中。如果该值不存在,它将 INSERT
记录。否则,它将 UPDATE
table 与两个值的总和。
您也可以借助这些查询以这种方式完成。
--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