2017-01-30 4 views
1

だから、マッチと非マッチした結果をカウントSQL - マージ使用し、私が一致した行数を見つけるために私がしたい、次のクエリを使用した場合

MERGE (targetTable) AS t 
USING (sourceTable) AS s 
ON t.ID = s.ID 
WHEN MATCHED THEN 
    (some statements) 
WHEN NOT MATCHED BY SOURCE THEN 
    (some statements) 
WHEN NOT MATCHED BY TARGET THEN 
    (some statements) 

だから私はしたいのですが一致した

  • のカウントを知っているソース
  • で一致していないターゲットにマッチしていない

私はあなたが出力を数えることができると知っていますが、私が正しくリコールすれば、出力は挿入、更新、削除のみを考慮しています。

+0

これは私が挿入および更新またはneither'両方を使用することがあります私のマッチした文のいくつかの中で '何を意味しています。 – TheGameiswar

+0

@TheGameiswar例:一致すると、aをbに更新cを削除d。すべて同じマッチ内にあります。または同じマッチ内におそらく全くありません。 – Migz

+0

一致するものの中には1つのステートメントしか存在しません。 https://msdn.microsoft.com/ru-ru/library/bb510625.aspx「」、「」を参照してください –

答えて

1

あなたはマージする前にこのような何かを実行することができます:

SELECT SUM(CASE WHEN t.ID = s.ID THEN 1 ELSE 0 END) as [Matched], 
     SUM(CASE WHEN s.ID IS NULL THEN 1 ELSE 0 END) as [NotMatchedByTarget], 
     SUM(CASE WHEN t.ID IS NULL THEN 1 ELSE 0 END) as [NotMatchedBySource] 
FROM targetTable AS t 
FULL OUTER JOIN sourceTable AS s 
    ON t.ID = s.ID 
関連する問題