2016-08-02 6 views
0

Я должен написать запрос, который сравнивает данные между двумя системами, система А и система В. В конечном выходной таблице я должен иметь SystemA_Field, SystemB_Field следуют SystemA_Value, SystemB_Value (см ниже).SQL Server: сравнить значения из двух или более таблиц

Это сравнивает значения двух систем вместе с именем столбцов двух систем.

Другими словами, столбцы должны быть в строках вместе со значениями столбцов.

enter image description here

+0

все таблицы имеют сопоставимые поля идентификатора? Или вы используете строго порядковое положение столбцов для их сравнения? Тем не менее вам придется сопоставлять имена таблиц в разных системах, если они отличаются друг от друга. – Beth

+0

Если у вас нет поля для связывания этих таблиц, это будет декартово произведение двух таблиц, которое приведет к бесполезным результатам. –

+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 

BTW вы смотрели на SQL RedGate Сравним? http://www.red-gate.com/products/sql-development/sql-comparison-sdk/

+0

Это не работает. Предположим, я хочу добавить адрес и город. – Apollo

+0

Я изменил запрос, чтобы разместить второе поле. –

+0

Slava, ContractNo & ContractNumber должен быть в выходе, так как пользователь хочет увидеть сравнение двух полей. – Apollo