2015-05-22 2 views
1

Я использую sql-сервер. У меня есть две таблицы (простой снимок снизу).объединение двух таблиц и добавление дополнительного столбца

table hlds    table bench 
name country wgt  name country wgt 
abc us  30   abc us  40 
mno uk  50   ppp fr  45 
xyz us  20   xyz us  15 

, что я хотел бы сделать, это вычислить differnces в столбцах РГТ и вставить результаты в другой таблице, позволяет называть его merge_tbl. Другая вещь, которую я хотел бы сделать, - это merge_tbl иметь бит столбца, где 1, если компания существует в таблице hlds.

Так что я хотел бы, чтобы результат выглядеть, как показано ниже,

merge_tbl 
name country wgt inHld 
abc us  -10 1 
mno uk  50 1 
xzy us  5 1 
ppp fr  -45 0 

Как я могу идти об этом?

ответ

1

Я думаю, вам нужен FULL OUTER JOIN, чтобы получить записи из обеих таблиц. Затем вы можете использовать INSERT INTO SELECT заявления сделать вставку:

INSERT INTO merge_tbl 
SELECT COALESCE(h.name, b.name) AS name, 
     COALESCE(h.country, b.country) AS country, 
     COALESCE(h.wgt, 0) - COALESCE(b.wgt, 0) AS wgt, 
     CASE WHEN h.name IS NOT NULL THEN 1 
      ELSE 0 
     END AS inHld 
FROM hlds AS h 
FULL OUTER JOIN bench AS b ON h.name = b.name AND h.country = b.country 

ON положения о JOIN операции зависит от ваших реальных потребностей. Я сделал предположение, что записи от hlds, таблицы соответствуют, если иname и country полей равны.

Demo here

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