合并重复数据
有这样一个表
declare @a table(a varchar(10),b varchar(20),c int)
insert @a select 'A' ,'T',5
union all select 'A' ,'T',8
union all select 'B' ,'S',10
如何合并字段a和b相同的C值。并删除其中一行。得出如下结果?
SELECT * FROM @a
/*
a b c
A T 13
B S 10
*/
------解决方案--------------------@a 增加一个自增列
declare @a table(id int identity(1,1), a varchar(10),b varchar(20),c int)
insert @a select 'A' ,'T',5
union all select 'A' ,'T',8
union all select 'B' ,'S',10
--合并C值
;with B AS (
select a, b, sum(c) as c, min(id) as mid
from @a
group by a, b
)
update @a set c=(select top 1 c from B where mid=id)
--删除重复的
delete from @a where c is null
select * from @a
------解决方案--------------------select a,b,sum(c) c from @a group by a,b
1、把结算生成临时表
2、再清空原表
3、再把临时表新增到原表