Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较3个SQL Server表,一旦根据某个属性匹配,则将结果放在一个表中,如果不匹配,则将结果放在另一个表中_Sql_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

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

比较3个SQL Server表,一旦根据某个属性匹配,则将结果放在一个表中,如果不匹配,则将结果放在另一个表中,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我有一个简单的要求,有3个SQL Server表,如下所示: 表1;纵队 AID Name DOB Gender PostCode 表2;纵队 BID Name DOB Gender PostCode 表3;纵队 CID Name DOB Gender PostCode 我希望在所有表中基于姓名、出生日期、性别和邮政编码连接内部连接,如果记录匹配,我希望将结果放在一个表中,其余记录放在另一个表中,以便进一步比较/处理 第一部分简单介绍了此查询: SELE

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

表1;纵队

  AID  Name  DOB  Gender  PostCode
表2;纵队

  BID  Name  DOB  Gender  PostCode
表3;纵队

  CID  Name  DOB  Gender  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个表A=20、B=20和C=10中总共有50条记录,并且根据上述查询所有记录匹配的输出为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;

这似乎是一种非常奇怪的连接表的方式,但是,当涉及到一个人时,您的连接条件并不是唯一的。请告诉我们你尝试了什么。下面的答案有用吗?你熟悉接受答案吗?是的,我熟悉接受答案,让我试试下面的问题。此外,在加入it时,我不仅尝试匹配各专栏,如果它们匹配,我会给它们一些分数。因此,在非唯一专栏上,感谢Hanks Gordon的快速回复。谢谢。然而,在最后的表格中,我要查找所有ID,即AID、BID和CID,因为它们来自不同的来源。所以我需要的最后一个表应该有列名称,如AID、BID、CID、Name、DOB、Gender、PostCode。抱歉没有提前提及。如果属性与内部联接上所有3个SQL表中的属性匹配,我将给它们一些分数,对于剩余的记录,我将基于更少的属性进行匹配以给它们分数。例如,如果属性在所有3个表中都不匹配,我将选择剩余的记录并仅在2个表中进行比较。希望这是我的梦想。@Nitesh。这是原始表格中的行,这是我如何解释您的问题的,因此ID在那里,但在不同的行中。当然,让我尝试相同的方法,并感谢您的帮助。感谢以上的工作,我也尝试过同样的方法。谢谢你的帮助