2016-10-24 25 views
0

我一直在嘗試在此工作幾天,並且找不到合適的解決方案。根據表2中的重複項更新記錄

我有2個表:

-Adgroups:包含與他們的uniqueAdgroupID和AdgroupName廣告組的列表。此表具有重複的名稱。

-Adgroup_Campaigns:包含具有uniqueCampaignID的廣告系列列表和來自table1的uniqueAdgroupId。

我需要做的就是找到表[廣告羣組的所有重複的名字,這是我做下面的查詢:

SELECT 
    o.[AdGroup_Id], o.[AdGroup] 
FROM (
    SELECT [AdGroup], COUNT(*) as intCount 
    FROM [dbo].[AdGroup] 
    GROUP BY [AdGroup] 
    HAVING COUNT(*) > 1 
    ) 
AS d 
INNER JOIN [dbo].[AdGroup] o ON o.[AdGroup] = d.[AdGroup] 

這將返回一個列表,如:

Adgroup_Id AdGroup  
----------- ---------- 
1   PRE-MAS--v2-LP2  
2   PRE-MAS--v2-LP2  
5   PRE-MAS--v2-LP2  
6   UNI-A-v2-LP2 
8   UNI-A-v2-LP2 
10   UNI-A-v2-LP2 
16   PRE-UNI-v2-LP2 
17   PRE-UNI-v2-LP2 
20   PRE-UNI-v2-LP2 

現在我過檢查表Adgroup_Campaigns所有記錄哪些AdGroupId在重複的廣告組列表中,我使用以下查詢:

SELECT * FROM 
(
    SELECT 
     o.[AdGroup_Id], o.[AdGroup] 
    FROM (
     SELECT [AdGroup], COUNT(*) as intCount 
     FROM [dbo].[AdGroup] 
     GROUP BY [AdGroup] 
     HAVING COUNT(*) > 1 
     ) 
    AS d 
    INNER JOIN [dbo].[AdGroup] o ON o.[AdGroup] = d.[AdGroup] 
) 
AS x INNER JOIN [dbo].[AdGroupCampaignMapper] t 
ON t.[AdGroup_Id] = x.[AdGroup_Id] 

它返回像一個列表:

Adgroup_Id AdGroup   Campaign_Id  
----------- ---------  ------------ 
1   PRE-MAS--v2-LP2 1  
2   PRE-MAS--v2-LP2 3  
5   PRE-MAS--v2-LP2 5  
6   UNI-A-v2-LP2  6 
8   UNI-A-v2-LP2  7 
10   UNI-A-v2-LP2  8 
16   PRE-UNI-v2-LP2 9 
17   PRE-UNI-v2-LP2 10 
20   PRE-UNI-v2-LP2 11 

所以我需要的是將實際更新表中字段Adgroup_Campaigns的adgroup_id所以每個組重複的有作爲的adgroup_id該組的第一個ID像這樣的查詢:

Adgroup_Id AdGroup   Campaign_Id  
----------- ---------  ------------ 
1   PRE-MAS--v2-LP2 1  
1   PRE-MAS--v2-LP2 3  
1   PRE-MAS--v2-LP2 5  
6   UNI-A-v2-LP2  6 
6   UNI-A-v2-LP2  7 
6   UNI-A-v2-LP2  8 
16   PRE-UNI-v2-LP2 9 
16   PRE-UNI-v2-LP2 10 
16   PRE-UNI-v2-LP2 11 

任何幫助將不勝感激。

回答

1

與內部聯接

update a 
set AdGroupCampaignMapper.Adgoup_Id = t.min_id 
FROM [dbo].[AdGroupCampaignMapper] as a 
INNER JOIN ( 
    SELECT [AdGroup] , min([AdGroup_Id]) min_id, COUNT(*) as intCount 
     FROM [dbo].[AdGroup] 
     GROUP BY [AdGroup] 
     HAVING COUNT(*) > 1 ) t on . t.AdGroup = a.AdGroup 
+0

謝謝,但實際上不工作,將從所有廣告組選擇最小的adgroup_id,並把它在所有的活動(做了測試我自己),你可以使用更新。 – victorgonal

+0

@victorgonal ...我很抱歉錯列..我已經使用Adgroup_id更新了答案 – scaisEdge