查询标识具有不同值的重复记录

时间:2018-09-07 17:31:12

标签: sql sql-server

我有一个表,其中已装载4个不同来源的记录。除了FName,LName,Addr1,Addr2,City,State和Zip,每个来源的记录之间没有公共因素。我会根据加载它们的源文件为每个记录分配一个FileID。我需要构建一个查询,在其中可以识别出在所有4个文件,3个文件,2个文件等中都发现了哪个人/家庭。我只需要为每个重复的人/家庭维护一个记录。

另一个棘手的部分是,我在4个文件中的2个上有电子邮件地址,另外两个文件上也有一个Emailable字段。这是在维护单个选定记录时也需要考虑的一个因素。

例如,一个组将由以下各项表示:“以下所有列表中的个人:DMA,车辆所有权和生活方式(财富引擎)列表。这些人必须具有电子邮件地址。”但是,然后需要将另一个组标识为“以下所有列表中的个人:DMA,车辆所有权和生活方式(财富引擎)列表。这些人没有电子邮件地址”

示例数据:

 ID                         FirstName LastName  FullName   Address1 Address2  City    State Zip     Zip4    EmailAddress            FILE    EMAILABLE
 06925901SNDCR44110G6520  S Nylah     Watson    NULL       1234 Main    NULL Anytown    ST  10000   2000    NULL                    DMA     Y
 1641189779                 Nylah     Watson    NULL       1234 Main         Anytown    ST  10000   2000    nylahwatson@gmail.com   LST 
 06925901SNDCR44110G6520  S Nylah     Watson    NULL       1234 Main    NULL Anytown    ST  10000   2000    NULL                    VEH     Y
 374977111                  Nylah     Watson    NULL       1234 Main    NULL Anytown    ST  10000   2000    nylahwatson@gmail.com   V12     NULL
 48770181SBRNT 1345M6352  S Watson    Nylah     NULL       4321 Main    NULL HOUSTON    TX  20000   3000    NULL                    DMA     N
 48770181SBRNT 1345M6352  S Watson    Nylah     NULL       4321 Main    NULL HOUSTON    TX  20000   3000    NULL                    VEH     N
 1933990731                 Watson    Nylah     NULL       4321 Main         Houston    TX  20000   3000                            LST 

2 个答案:

答案 0 :(得分:0)

根据您需要的组的数量/灵活程度,您可能需要执行以下操作:

const url = 'tel:5684567854';

Linking.canOpenURL(url).then(supported => {
  if (!supported) {
    console.log('Can\'t handle url: ' + url);
  } else {
    return Linking.openURL(url);
  }
}).catch(err => console.error('An error occurred', err));

然后使用该结果集创建您的组合组,例如:

Select Name, Address... -- Fields you want to group on (consider to identify the same person)
    , max(case when File = 'DMA' then 1 else 0 end) as HasDMAFile
    , max(case when File = 'Veh' then 1 else 0 end) as HasVEHFile --repeat for your other file types
    , max(case when emailaddress is not null then 1 else 0 end) as HasEmail
From MyTable
Group by Name, Address...--same list of fields as you use at the beginning of your select

答案 1 :(得分:0)

SELECT
   FName, LName, Addr1, Addr2, City, State, Zip,count(distinct File)
FROM <TABLE>
GROUP BY FName, LName, Addr1, Addr2, City, State, Zip
Having count(distinct File)=4

电子邮件可以合并,但是您需要确定优先顺序。