-- Создали таблицы
CREATE TABLE table1 (Numer INT,Data DATETIME , value1 FLOAT,value2 FLOAT)
CREATE TABLE table2 (Numer INT,Data DATETIME , value1 FLOAT,value2 FLOAT)
go
-- Очищаем таблицы
TRUNCATE TABLE table1
TRUNCATE TABLE table2
-- Заполняем данным
INSERT INTO dbo.table1 ( Numer, Data, value1, value2 ) VALUES ( 1, '01.01.2015', 1.1, 1.2 ) -- только в первой таблице
INSERT INTO dbo.table1 ( Numer, Data, value1, value2 ) VALUES ( 1, '01.01.2015', 1.2, 1.2 )
INSERT INTO dbo.table1 ( Numer, Data, value1, value2 ) VALUES ( 2, '01.01.2014', 2.1, 2.2 )
INSERT INTO dbo.table1 ( Numer, Data, value1, value2 ) VALUES ( 5, '01.01.2014', 3.1, 1.2 )
INSERT INTO dbo.table1 ( Numer, Data, value1, value2 ) VALUES ( 4, '01.01.2015', 1.1, 4.2 )
-- Заполняем данным
INSERT INTO dbo.table2 ( Numer, Data, value1, value2 ) VALUES ( 1, '01.01.2015', 1.2, 1.2 )
INSERT INTO dbo.table2 ( Numer, Data, value1, value2 ) VALUES ( 2, '01.01.2014', 2.1, 2.2 )
INSERT INTO dbo.table2 ( Numer, Data, value1, value2 ) VALUES ( 3, '01.01.2014', 5.1, 1.2 ) -- Искажение в первом значении
INSERT INTO dbo.table2 ( Numer, Data, value1, value2 ) VALUES ( 4, '01.01.2015', 1.1, 4.3 ) -- Искажение в втором значении
go
SELECT 'Нет совпадения по номеру и дате'
,
* FROM dbo.table1 t1
FULL JOIN dbo.table2 t2
ON t2.Data = t1.Data AND t2.Numer = t1.Numer
WHERE t2.Numer IS NULL OR t1. Numer IS NULL
UNION ALL
SELECT 'Нет совпадения по первому значению'
, * FROM dbo.table1 t1
JOIN dbo.table2 t2
ON t2.Data = t1.Data AND t2.Numer = t1.Numer
AND t2.value2 = t1.value2
where t2.value1 <> t1.value1
UNION ALL
SELECT 'Нет совпадения по второму значению'
, * FROM dbo.table1 t1
JOIN dbo.table2 t2
ON t2.Data = t1.Data AND t2.Numer = t1.Numer
AND t2.value1 = t1.value1
where t2.value2 <> t1.value2