2017-11-27 5 views
0

テーブルA(姓、名、タグ)にレコードがあり、タグ列がNullであり、この列のレコードは同じ名前と姓が複製されますレコードを複製しないで初めて一致するレコードを更新する

私は別のテーブルAと全く同じ列を持ち、テーブルAよりも多くのレコードを持ち、すべてのレコードにタグがあり、レコードも複製できます。

Table B 
{ 
first name =’Mostafa’, Last name =’hamza’, Tag=’3245435’, 
first name =’Ayman’, Last name =’Malek’, Tag=’45455’, 
first name =’Mohamed’, Last name =’Ahmed’, Tag=’12345’, 
first name =’Mohamed’, Last name =’Ahmed’, Tag=’87654’, 
first name =’Ibrahim’, Last name =’Ahmed’, Tag=’658568’ 
} 

は、私は、テーブルB上の対応する値に応じて、表Aのタグを更新したいと私は更新ステートメントを更新しようとする場合にのみ、私は

問題があるテーブルA上の固有のタグを見つけることができます表Bの最後のタグが基準に一致場合、常に、テーブルAの全一致するレコードを更新しているので、マッピングは以下のように修正されていない。

Table A 
    { 
    first name =’Mohamed’, Last name =’Ahmed’, Tag=’87654’, 
    first name =’Mohamed’, Last name =’Ahmed’, Tag=’87654’, 
    first name =’Ibrahim’, Last name =’Ahmed’, Tag=’658568’ 
    } 

を所望の出力は次のようになります

Table A 
    { 
    first name =’Mohamed’, Last name =’Ahmed’, Tag=’12345’, 
    first name =’Mohamed’, Last name =’Ahmed’, Tag=’87654’, 
    first name =’Mohamed’, Last name =’Ahmed’, Tag=’’, 
    first name =’Ibrahim’, Last name =’Ahmed’, Tag=’658568’ 
    } 
はあなたがCTEで両方のテーブルに行番号を割り当て、その後、更新を行うことができ
+0

実際の最終出力はどのくらいですか? –

+0

は私が間違って結果の問題を修正し、それがすべての作業を他の人がすでにあなたのために行っている無効にするのであなたは、答えを受け入れた後、あなたの質問を変更しないでください – MohamedHamza

+0

結果を予想していました。 –

答えて

0

参加:

WITH cteA AS (
    SELECT [first name], [Last name], Tag, 
     ROW_NUMBER() OVER (PARTITION BY [first name], [Last name] ORDER BY Tag) rn 
    FROM tableA 
), 
cteB AS (
    SELECT [first name], [Last name], Tag, 
     ROW_NUMBER() OVER (PARTITION BY [first name], [Last name] ORDER BY Tag) rn 
    FROM tableA 
) 

UPDATE a 
SET Tag = b.Tag 
FROM cteA a 
INNER JOIN cteB b 
    ON a.[first name] = b.[first name] AND 
     a.[Last name] = b.[Last name] AND 
     a.rn = b.rn; 

ここにトリックは最初の名前/姓グループ内の各レコードが割り当てられますされていること行番号。ないタグが存在しないので、テーブルAのために、行番号の割り当ては、意味がありませんが、あなたの例では2つのレコードの1つは、1と表Bのための他の2、行番号の割り当ては、に依存する割り当てられますタグの順序。この順序付けは重要ではありませんが、この2つの行番号を組み合わせることで、表Bの各レコードが表Aの1つのレコードに論理的にマップされるようになります。

+0

がLOL、ちょうどあなたの5秒後に同じ答えを投稿:Nitin_g3 @ P –

+0

は、それはOKです...あなたを残して、多分私はつもりはそれを取り除くよ、何か –

+0

ナを逃しました。 –

関連する問題