2015-10-15 44 views
1

你能帮我解决我的SQL Query问题吗?合并重复记录并更新其表

我想合并/(必要时总和)customer的所有数据与重复的客户mame。

在我的项目,我已经找到了所有已使用此代码复制客户:

select Firstname, Lastname, count(1) as RepeatedCount 
from customer 
group by FirstName, LastName 
having count(1) > 1 

如何更新Customer表只有1客户记录并获得totalsalestotavisits的总和只有一个记录。


的样本数据:

FirstName LastName TotalSales  TotalVisits 
---------- ---------- -------------- ----------- 
Michelle Go   0.00   0 
Michelle Go   6975.00  1 
Michelle Go   1195.00  1 
Michelle Go   9145.00  3 
Michelle Go   57785.00  5 
Michelle Go   5845.00  1 
Michelle Go   0.00   0 
Michelle Go   0.00   0 

预期输出:

FirstName LastName TotalSales  TolalVisits 
---------- ---------- -------------- ----------- 
Michelle Go   80945.00  11 
+0

MySQL或SQL的服务器? –

+0

SQL Server绅士。 –

回答

1

你必须使用聚合函数SUMGROUP BY

查询

SELECT FirstName,LastName, 
SUM(totalsales) as totalsales, 
SUM(totalvisits) as totalvisits 
FROM customer 
GROUP BY FirstName,LastName; 

并为更好的做法,我建议你添加一个列customerId这是独一无二的。
因此,您可以轻松将其分组。

SQL Fiddle

+0

Yah,这就是我想要的结果, 但是,我怎样才能删除这些重复的记录和这个输出到客户表?其他人说,我需要把它放在临时表上,但我不知道如何。 –

+0

在你的案例中,每行有不同的'totalsales'和'totalvisits'值。那么你想如何删除重复项。 – Wanderer

0

你可以使用SUMGROUP BY,并在临时表中插入的结果。

的,TRUNCATE原始表,CustomerINSERT的的#tempTable数据:

TRUNCATE TABLE Customer 
INSERT INTO Customer 
    SELECT * FROM #tempTable 
+0

你让我的笑容比赤道更宽:)谢谢Felix 我现在所能做的就是不截断整个表格,我会选择要删除的数据。 再次感谢:) –

+0

为什么不'TRUNCATE'?第一个查询将返回所有唯一的'customer'及其'totalvists'和'totalsales'。 –

+0

因为在我的真实表格中,有一些客户没有重复 –

0

让我们看看下面的CTE作为主表。

;WITH user_details 
AS 
(
    SELECT 'Michelle' AS FirstName,'Go' AS LastName,0.00 AS totalsales,0 AS totalvists 
UNION 
    SELECT 'MICHELLE','GO',6975.00,1 
UNION 
    SELECT 'michelle','go',1195.00,1 
UNION 
    SELECT 'michelle','go',9145.00,3 
UNION 
    SELECT 'MICHELLE','GO',57785.00,5 
UNION 
    SELECT 'MICHELLE','GO',5845.00,1 
UNION 
    SELECT 'Michelle','Go',0.00,0 
UNION 
    SELECT 'Michelle','Go',0.00,0 
) 

集团聚合函数查询并插入到一个临时表

SELECT 
    FirstName, 
    LastName, 
    SUM(totalsales) [totalsales], 
    SUM([totalvists]) [totalvisits] 
INTO 
    #temp 
FROM 
    user_details 
GROUP BY 
    FirstName, 
    LastName 

-- select * from #temp 

截断你的主表

TRUNCATE TABLE user_details 

现在再次插入更新的记录到您的新表

INSERT INTO user_details (FirstName,LastName,totalsales,totalvisits -- Main table 
SELECT 
    FirstName, 
    LastName, 
    totalsales, 
    totalvisits 
FROM 
    #temp