Zusammenführen von zwei Tabellen und Hinzufügen zusätzlicher Spalte

Ich verwende SQL server. Ich habe zwei Tische (einfacher Schnappschuss unten).

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 

was ich tun möchte, ist, die Unterschiede in den Wgt-Spalten zu berechnen und die Ergebnisse in eine andere Tabelle einzufügen, lass es merge_tbl aufrufen. Das andere, was ich tun möchte, ist in merge_tbl haben ein bisschen Spalte, wo es 1 ist, wenn das Unternehmen in der Tabelle existiert.

So möchte ich das Ergebnis wie unten aussehen,

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

Wie gehe ich damit hin?

Ich denke, du brauchst eine FULL OUTER JOIN , um Aufzeichnungen von beiden Tischen zu bekommen. Dann können Sie eine INSERT INTO SELECT statement verwenden, um die Einfügung auszuführen:

 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 

Die ON Klausel des JOIN Vorgangs hängt von Ihren tatsächlichen Anforderungen ab. Ich habe die Annahme gemacht, dass Aufzeichnungen von hlds , hlds übereinstimmen, wenn sowohl name als auch hlds gleich sind.

Demo hier