2016-10-24 42 views
0

私はすでにこれを数日間作業しようとしていましたが、適切な解決策を見つけることができません。テーブル2の重複に基づいてテーブル1のレコードを更新します。

私は2つのテーブルをしました:

-Adgroups:そのuniqueAdgroupIDとAdgroupNameと広告グループのリストが含まれています。このテーブルには重複した名前があります。

-Adgroup_Campaigns:uniqueCampaignIDを持つキャンペーンのリストと、table1のuniqueAdgroupIdが含まれています。

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 

今私が交差:

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_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

関連する問題