【问题标题】:Excel SQL - Compare ValuesExcel SQL - 比较值
【发布时间】:2015-03-23 22:32:06
【问题描述】:

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

这是通过 VBA 在 excel 中完成的,我尝试了几种不同的方法,例如完全连接和联合,但无法运行。

基本场景是这样的:

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

所以它会带回其中一条记录

或者

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

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

谢谢

【问题讨论】:

    标签: sql excel


    【解决方案1】:

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

    1. ID 和数量组合在 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

    您可以将这两者结合在一起以获得一条不匹配记录的声明,如下所示:

    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
    

    【讨论】:

      猜你喜欢
      • 2011-07-31
      • 2013-08-27
      • 1970-01-01
      • 2011-05-11
      • 2016-12-20
      • 2012-07-10
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多