2016-08-02 15 views
0

システムAとシステムBの2つのシステム間でデータを比較するクエリを作成する必要があります。最終出力テーブルでは、SystemA_FieldSystemB_FieldSystemA_ValueSystemB_Value以下)。SQL Server:複数のテーブルの値を比較する

これは2つのシステムの値と2つのシステムの列の名前を比較します。

つまり、列は列の値とともに行内にある必要があります。

enter image description here

+0

すべてのテーブルには同等のIDフィールドがありますか?あるいは、列を順序付けして厳密に比較していますか?それでも、テーブル名が異なる場合は、システム間でテーブル名をマッピングする必要があります。 – Beth

+0

これらのテーブルをリンクするフィールドがない場合、無駄な結果をもたらす2つのテーブルのデカルト積となります。 –

+0

@Bethはい、すべてのテーブルには同等の列があります。 – Apollo

答えて

0

は、あなたの内側のクエリからの結果と何が問題なのですか?

 SELECT  
     ContractType, 
     LeaseType, 
     ContractNo, 
     ContractNumber 
    FROM   
     TableOne INNER JOIN 
     TableA ON 
     ContractNo = ContractNumber 
    WHERE  
     ContractNo = 101 
+0

出力表が見えましたか?列は行内になければなりません。 – Apollo

0

彼らは常に一致する必要があるためあなたは、出力ContractNo & ContractNumberする必要はありません。

SELECT t1.ContractNo, t2.ContractNumber, 
CASE 
    WHEN t1.ContractType != t2.LeaseType THEN 'ContractType' 
    WHEN t1.[Address] != t2.AddressMain THEN 'Address' 
    ELSE 'N/A' END as SystemA_Field, 
CASE 
    WHEN t1.ContractType != t2.LeaseType THEN 'LeaseType' 
    WHEN t1.[Address] != t2.AddressMain THEN 'AddressMain' 
    ELSE 'N/A' END as SystemB_Field, 
CASE 
    WHEN t1.ContractType != t2.LeaseType THEN CAST(ContractType as VARCHAR) 
    WHEN t1.[Address] != t2.AddressMain THEN CAST(Address as VARCHAR) 
    ELSE 'N/A' END as SystemA_Value, 
CASE 
    WHEN t1.ContractType != t2.LeaseType THEN CAST(LeaseType as VARCHAR) 
    WHEN t1.[Address] != t2.AddressMain THEN CAST(AddressMain as VARCHAR) 
    ELSE 'N/A' END as SystemB_Value 
FROM Table1 as t1 
INNER JOIN Table2 as t2 
ON t1.ContractNo = t2.ContractNumber 
WHERE t1.ContractType != t2.LeaseType 
OR t1.[Address] != t2.AddressMain 

はところであなたはレッドゲートのSQLの比較を見てきましたか? http://www.red-gate.com/products/sql-development/sql-comparison-sdk/

+0

これは動作しません。私は住所と都市も追加したいと言います。 – Apollo

+0

2番目のフィールドに対応するようにクエリを変更しました。 –

+0

SlavaのContractNo&ContractNumberは、ユーザーが2つのフィールドの比較を見たいので出力になければなりません。 – Apollo

関連する問題