根据多个条件过滤掉相同的数据行以仅显示离群值

Filter out identical rows od data based on mutliple criteria to only show outliers

我正在创建一个存储过程,我想 return 一个特定的结果集

我有 2 个数据集,我试图以某种方式加入它们,以便它只有 return 异常值记录(没有匹配项)。我考虑过使用 UNION 和 EXCEPT,但它似乎不适用于这种情况。为了使这个不那么复杂,我目前在我的程序中有两个 CTE(或者我可以使用#TempTables)。

查询结果1。在下面的结果集中,这个查询会return3个字段。 Field3 文本值在这里将始终相同。

 Field1         Field2        Field3
 123            BAK           'Missing in Query 2'
 234            HAO           'Missing in Query 2'
 345            OPP           'Missing in Query 2'

查询结果2。同样的处理,Field3总是有相同的文本值。

 Field1         Field2        Field3
 123            BAK           'Missing in Query 1'
 234            HAO           'Missing in Query 1'
 678            UTO           'Missing in Query 1'

期望的结果:这两个在第一行(字段 345)中 return 的原因是查询 2 中缺少,而第二行在查询 1 中丢失。我只是在寻找匹配项其中 Query1.Field1=Query2.Field1 和 Query1.Field2 = Query2.Field2。

  Field1         Field2        Field3
  345            OPP           'Missing in Query 2'   <- from Query 1
  678            UTO           'Missing in Query 1'   <- from Query 2

我曾尝试使用 FULL JOIN 来执行此操作,但 FULL JOIN returns 额外的 3 列具有 NULL 值。我试图避免这种情况,只显示如上所示的结果。任何帮助将不胜感激。

我认为您需要两个表中都不存在的行。一种方法是:

select qr1.*
from qr1
where not exists (select 1 from qr2 where qr2.field1 = qr1.field1 and qr2.field2 = qr1.field2)
union all
select qr2.*
from qr2
where not exists (select 1 from qr1 where qr1.field1 = qr2.field1 and qr1.field2 = qr2.field2);

您可以使用 full outer join :

select coalesce(qr1.field1, qr2.field1) as field1,
       coalesce(qr1.field2, qr2.field2) as field2,
       (case when qr1.field1 is null 
             then 'Missing in Query 1'
             else 'Missing in Query 2'  
        end) as Field3
from qr1 full outer join
     qr2
     on qr1.field1 = qr2.field1 and qr1.field2 = qr2.field2
where (qr1.field1 is null or qr2.field2 is null);