2015-10-15 64 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