比较3个SQL Server表,一旦根据某个属性匹配,就将结果放在一个表上,如果不匹配,就把结果放在另一个表中



我有一个简单的要求,有3个SQL Server表,如下所示:

  • 表1;列

    AID  Name  DOB  Gender  PostCode
    
  • 表2;列

    BID  Name  DOB  Gender  PostCode
    
  • 表3;列

    CID  Name  DOB  Gender  PostCode
    

我希望根据姓名、出生日期、性别和性别加入(内部加入(;PostCode跨所有表,如果记录匹配,我希望将结果放在一个表中,其余记录放在另一个表进行进一步比较/处理。

这个查询的第一部分很简单:

SELECT AID, BID, CID, A.Name, A.DOB, A.Gender, A.PostCode
FROM TAB_A
JOIN TAB_B B ON A.Name = B.Name 
AND A.DOB = B.DOB 
AND A.Gender = B.Gender 
AND A.PostCode = B.PostCode
JOIN TAB_C C ON A.Name = C.Name 
AND A.DOB = C.DOB 
AND A.Gender = C.Gender 
AND A.PostCode = C.PostCode

但其余记录中不匹配的第二部分需要将它们放在一个单独的表中。

例如,如果在所有3个表中总共有50个记录(A=20,B=20和C=10(,并且基于上述查询所有记录匹配的输出是5,则我希望在单独的表中存储95个记录。

我们将感谢您的帮助/答复。

感谢

您可以使用union all来组合这些表。然后使用窗口函数按您关心的列对匹配项进行计数。

返回匹配小于3:的行

select id, Name, DOB, Gender, PostCode
from (select id, Name, DOB, Gender, PostCode,
count(*) over (partition by Name, DOB, Gender, PostCode) as cnt
from ((select AID as id, Name, DOB, Gender, PostCode
from a
) union all
(select BID, Name, DOB, Gender, PostCode
from b
) union all
(select CID, Name, DOB, Gender, PostCode
from c
)
) abc
) abc
where cnt < 3;

最新更新