日期:2014-05-17  浏览次数:20366 次

合并重复数据
有这样一个表
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、再把临时表新增到原表