将多个记录合并到表中的一行中

时间:2011-04-13 16:52:43

标签: database sql-server-2005 stored-procedures

我有一张表,其中包含相同销售代理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 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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

答案 2 :(得分:0)

SELECT SalesAgentID, SUM(SalesAmount) FROM Sales GROUPBY SalesAgentID

但是这里有问题...为什么你的桌子有SalesAgentId和SalesAgentName?

它应该只包含ID,名称应该在SalesAgent表中。然后,您将使用连接

检索名称