2014-09-25 4 views
0

Мне нужно сравнить строки двух таблиц, а также показать только coulmns, имеющие разные данные, т.е. данные несоответствия из обеих таблиц. Предположим, что Table1 и Table2 имеют 50 столбцов, и в этом случае только записи ошибок - это 5, тогда эти coulms в инструкции Select.Сравнение данных таблицы SQL

Сопутствующая деталь дополнена запросом Союза. Моим препятствием является то, как придумать имена столбцов с нечеткими строками.

+2

Делитесь своими табличные структуры и данные – AK47

+0

И то, что вы получили до сих пор –

+0

Привет Джим, До сих пор я могу получить несоответствующие данные из обеих таблиц, но требует только mistached столбцов в операторе отбора –

ответ

0

Один из способов сделать это, чтобы получить список всех таких имен столбцов, сцепленных в одной строке, как:

select 
T1.id, case when t1.col1<> t2.col1 then 'Col1;' else '' end + 
    case when t1.col2<> t2.col2 then 'Col2;' else '' end 
    -- similar case statementes for all th columns you want to be included 
    -- in the list 
    as Mismatchedcolumns 
from Table1 T1 
Join Table2 T2 on T1.id = T2.id 

Check Demo here..

0

Если вы смотрите на список всех несогласованных столбцов, то смотри ниже пример

CREATE TABLE TableA 
    ([Product] varchar(1), [Qty] int, [Price] int, [Comments] varchar(3)) 
; 

INSERT INTO TableA 
    ([Product], [Qty], [Price], [Comments]) 
VALUES 
    ('A', 20, 500, 'xyz'), 
    ('B', 50, 200, 'xyz'), 
    ('C', 90, 100, 'abc'), 
    ('D', 50, 500, 'xyz') 
; 

CREATE TABLE TableB 
    ([Product] varchar(1), [Qty] int, [Price] int, [Comments] varchar(3)) 
; 

INSERT INTO TableB 
    ([Product], [Qty], [Price], [Comments]) 
VALUES 

    ('B', 70, 200, 'cv'), 
    ('C', 90, 200, 'wsd'), 
    ('D', 40, 400, 'xyz'), 
    ('E', 50, 500, 'xyz') 
; 



SELECT b.Product, 
     b.Qty, 
     b.Price, 
     Result = CASE WHEN a.product IS NULL THEN 'New' 
        ELSE 'Updated: ' + 
         STUFF( CASE WHEN a.Qty != b.Qty THEN ',Qty' ELSE '' END + 
           CASE WHEN a.Price != b.Price THEN ',Price' ELSE '' END, 
          1, 1, '') 
       END 
FROM TableB b  
     LEFT JOIN TableA a 
      ON a.Product = b.Product 
WHERE a.Product IS NULL 
OR  a.Qty != b.Qty 
OR  a.Price != b.Price 

union 

SELECT 
a.Product,a.Qty,a.Price, 'NewA' as Result 
FROM 
TABLEA a left join 
TABLEB b on a.Product = b.Product 
WHERE b.Product is null 

модифицированную версию раствора при SQL Server 2008 compare two tables in same database and get column is changed

http://sqlfiddle.com/#!3/d1b3f/3

Смежные вопросы