Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 合并两个表并添加其他列_Sql_Sql Server - Fatal编程技术网

Sql 合并两个表并添加其他列

Sql 合并两个表并添加其他列,sql,sql-server,Sql,Sql Server,我正在使用sql server。我有两张桌子(下面是简单的快照) 我想做的是计算wgt列中的差异,并将结果插入另一个表中,我们称之为merge\u tbl。我想做的另一件事是在merge_tbl中有一个bit列,如果公司存在于表hlds中,那么它是1 所以我希望结果如下所示 merge_tbl name country wgt inHld abc us -10 1 mno uk 50 1 xzy us 5 1 ppp

我正在使用sql server。我有两张桌子(下面是简单的快照)

我想做的是计算wgt列中的差异,并将结果插入另一个表中,我们称之为merge\u tbl。我想做的另一件事是在merge_tbl中有一个bit列,如果公司存在于表hlds中,那么它是1

所以我希望结果如下所示

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

我该怎么做呢

我认为您需要一个
完全外部联接
来从两个表中获取记录。然后,您可以使用
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
JOIN
操作的
ON
子句取决于您的实际需求。我假设如果
name
country
字段相等,则
hlds
bench
表格中的记录将匹配

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