2016-10-04 4 views
2

Я работаю над сравнением двух почти идентичных таблиц и обновлением/добавлением результата во вторую таблицу. Вот две таблицы, которые я использую. Person1 (ID, имя, номер PHNumber) и Person2 (ID, имя, PHNumber, IsActive).сравнить две таблицы и добавить результат во вторую таблицу

Примечание: У человека 1 всегда больше/меньше/того же ряда, чем person2.Person1 является справочной таблицей, нам нужно добавлять/удалять строки, которые/не представляют собой person1 int человеку2. Я использую студию управления сервером Microsoft SQL Server.

Вариант 1: Если сравнить результат имеет больше строк (Пусть говорят person1 имеет 10, PERSON2 имеет 8rows), то мы должны добавить (2Rows) в PERSON2 и держать IsActive-1 для этих строк.

Вариант 2: Если сравниваемый результат имеет differnce (Пусть говорят person1 имеет 10, но PERSON2 имеет 20rows), то мы должны найти эти дельта 10rows и держать IsActive-0 для тех 10rows.

Надеемся, что запрос станет понятным и ожидающим ваших ценных решений. Спасибо.

Here Person1 does not contain newdata2 and contains newdata,newdata1 which are 
 
new values after comparing, so we are giving IsActive-0 and IsActive-1 
 
respectively. 
 
Person1: 
 
    ID  Name  PHNumber 
 
1 \t missouri  123 
 
2 \t kansas  111 
 
3 \t stlouise  234 
 
4 \t california 456 
 
5 \t india  888 
 
6 \t srilanka  780 
 
7 \t dallas  890 
 
8 \t texas  1111 
 
9 \t mario  1112 
 
10 \t sister  7878 
 
11 \t pontiac  8765 
 
12 \t newdata \t  1234 
 
13 \t newdata1  2345 
 

 
Person2: 
 
ID  Name  PHNumber IsActive 
 
1 \t missouri  123  1 
 
2 \t kansas  111  1 
 
3 \t stlouise  234  1 
 
4 \t california 456  1 
 
5 \t india  888  1 
 
6 \t srilanka  780  1 
 
7 \t dallas  890  1 
 
8 \t texas  1111  1 
 
9 \t mario  1112  1 
 
10 \t sister  7878  1 
 
11 \t pontiac  8765  1 
 
12  newdata2  987  1 
 

 
RESULT: Person2: 
 
ID  Name  PHNumber IsActive 
 
1 \t missouri  123  1 
 
2 \t kansas  111  1 
 
3 \t stlouise  234  1 
 
4 \t california 456  1 
 
5 \t india  888  1 
 
6 \t srilanka  780  1 
 
7 \t dallas  890  1 
 
8 \t texas  1111  1 
 
9 \t mario  1112  1 
 
10 \t sister  7878  1 
 
11 \t pontiac  8765  1 
 
12  newdata2  987  0 
 
13  newdata \t  1234  1 
 
14 \t newdata1  2345  1

+0

Какие соответствующие столбцы (где значения в столбцах одинаковы) делают ряд " равно "другому ряду? – granadaCoder

+0

Это очень просто. Попробуйте использовать заявление о слиянии/обновлении и вернитесь к нам. https://technet.microsoft.com/en-us/library/bb522522(v=sql.105).aspx –

+0

MySQL или SQL-Server? Вы оба отметили ... что вы имеете в виду? – pmbAustin

ответ

0

Если вы все еще ищете или ответ, вы можете попробовать, как это ...

;WITH cte 
AS (SELECT 
    COALESCE(p1.id, p2.id) AS id, 
    COALESCE(p1.name, p2.name) AS name, 
    COALESCE(p1.phnumber, p2.phnumber) AS phnumber, 
    CASE WHEN p1.name IS NULL THEN 0 ELSE 1 END AS IsActive 
FROM Person1 p1 
FULL JOIN person2 p2 
    ON p1.name = p2.name 
    AND p1.phnumber = p2.phnumber) 
SELECT 
    ROW_NUMBER() OVER (ORDER BY id, phnumber) AS id, 
    name, phnumber, IsActive 
FROM cte 
+0

Спасибо, Kannan Kndasamy, ваше решение дало мне правильный результат, но мне нужно протестировать во всех случаях. Спасибо, что потратили для меня ценное время. – Virat

+0

добро пожаловать ... –