Excel SQL – 比较值

我在这里的第一篇文章,寻找一些帮助,如何比较两个表中的值,并带回一个差异列表

这是通过VBA在Excel中完成的,我尝试了几种不同的方式,例如Full join和Union,但是无法运行。

基本场景是这样的:

Table A has 2 columns, Column 1 = ID Column 2 = Qty 

表B中完全相同

我想要做的是收集数量不同或不出现在任何表中的列表

例如

 Table A has ID 1 Qty 3 Table B has ID 1 Qty 2 

所以它会带回一个logging

要么

 Table A has ID 5 and Table B doesn't Table B has ID 7 and Table A doesn't 

不知道最好的方法来做到这一点,我知道我可以通过一个公式在Excel中做到这一点,但如果可能的话,尝试在SQL中完成

谢谢

从SQL的angular度来看,您将看到两个不同的语句:

  1. ID和Qty组合在A中,但不在B中
  2. ID和数量组合在B中,但不是A.

这看起来像这样:

  1. SELECT tableA.id, tableA.qty FROM tableA LEFT JOIN tableB on tableA.id = tableB.id and tableA.qty = tableB.qty WHERE tableB.qty IS NULL

  2. SELECT tableB.id, tableB.qty FROM tableB LEFT JOIN tableA on tableBid = tableA.id and tableB.qty = tableA.qty WHERE tableA.qty IS NULL

您可以将这两者结合在一起,得到如下所示的不匹配logging的单个语句:

 SELECT tableA.id, tableA.qty FROM tableA LEFT JOIN tableB on tableA.id = tableB.id and tableA.qty = tableB.qty WHERE tableB.qty IS NULL UNION ALL SELECT tableB.id, tableB.qty FROM tableB LEFT JOIN tableA on tableBid = tableA.id and tableB.qty = tableA.qty WHERE tableA.qty IS NULL 

你可以给每个单独的SQL语句添加一个原因,所以你知道为什么发生了不匹配:

 SELECT tableA.id, tableA.qty, "Item in Table A, but not Table B" as Reason FROM tableA LEFT JOIN tableB ON tableA.id = tableB.id AND tableA.qty = tableB.qty WHERE tableB.qty IS NULL UNION ALL SELECT tableB.id, tableB.qty, "Item in Table B, but not Table A" as Reason FROM tableB LEFT JOIN tableA ON tableBid = tableA.id AND tableB.qty = tableA.qty WHERE tableA.qty IS NULL