Excel SQL - 比较值

时间:2015-03-23 13:52:54

标签: sql excel

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

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

基本情景是:

Table A has 2 columns,

Column 1 = ID

Column 2 = Qty

表B中完全相同的设置

我想要做的是收集一个数据列表,其中数量不同或不会出现在任何一个表格中

e.g。

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

所以它会带回一条记录

或者

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

不确定最好的方法,我知道我可以通过公式在excel中完成,但如果可能的话,尝试在SQL中完成

由于

1 个答案:

答案 0 :(得分:1)

从SQL的角度来看,您将看到两个不同的陈述:

  1. ID和Qty组合在A中,但不在B
  2. ID和Qty组合在B中,但不是A
  3. 这看起来像是:

    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

    3. 您可以将这两者结合在一起,以获得不匹配记录的单一陈述,如下所示:

      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