2011-04-13 94 views
2

我有一个表具有相同销售代理I​​D但销售金额不同的多个记录。我怎样才能删除多行,只有总价值的总和。将多个记录合并到一个表中的一行

让我们例如假设表结构如下 -

SalesAgentId, SalesAgentName, SalesAmount 
111   , John Doe  , 8437.00 
112   , John O Connor , 5849.00 
111   , John Doe  , 438.00 
112   , John O Connor , 1234.00 

我想是(即使是到一个不同的表)以下 -

SalesAgentId, SalesAgentName, SalesAmount 
111   , John Doe  , 8875.00 
112   , John O Connor , 7083.00 

我们能做到这使用SQL语句还是应该只是一个存储过程?如果它使用的是SP,我们是否必须遍历每个记录......检查它是否始终存在,如果是,只需将SalesAmount字段添加到现有表中并实现它?

回答

3
SELECT SalesAgentId, SalesAgentName, SUM(SalesAmount) AS SalesAmount 
    INTO #AggSales 
    FROM Sales 
GROUP BY SalesAgentId, SalesAgentName; 

TRUNCATE TABLE Sales;  

INSERT INTO Sales 
SELECT * FROM #AggSales; 

DROP TABLE #AggSales; 
+0

这实际上满足了将数据聚合到同一个表中的OP要求。 (我也没有意识到你可以通过使用INTO自动创建临时表。) – 2011-04-13 17:02:17

0
SELECT SalesAgentID, SUM(SalesAmount) FROM Sales GROUPBY SalesAgentID 

但是这里有什么问题......为什么你的表有两个SalesAgentId和SalesAgentName?

它应该只包含ID,名称应该在SalesAgent表中。然后,你就检索与该名加入

1

这是我能想到这样做的最简单的方法:

create table #tempSales (salesagentid int, salesagentname varchar(50), salesamount money) 
go 

insert into #tempSales 
select salesagentid, salesagentname, sum(salesamount) 
from salesTable 
group by salesagentid, salesagentname 
go 

select * 
from #tempSales 
+0

不应在GROUP BY子句中还包括salesagentname? – Kanini 2011-04-13 20:31:47

+0

@Kanini哎呀。是。固定。 – 2011-04-13 20:36:51

相关问题