2015-07-10 44 views
1
FirstName  LastName  SSN   Phone   EncounterID 
Justin  Kelley  555-55-5555  517-555-1212 123456789 
Justin  Kelly  555-55-5555  517-555-1212 123456789 
James   Smith  444-44-4444  312-555-3434 99944444 
James   Smith  444-44-4444  312-555-3434 99944444 

我有一张如上所述的表,其中包含数百万EncounterID。我需要知道每列中存在差异(缺陷)的次数。我的例子输出将是:根据一列中的相似性检查所有其他列中的更改

First Name - 2/2 
Last Name - 1/2 
SSN - 2/2 
Phone - 2/2 

任何帮助吗?

+0

你认为“类似”行是什么?你为什么不把贾斯汀凯利和詹姆斯史密斯比较,并报告0场比赛?这纯粹是在EncounterID? – Siyual

+0

我不认为你想要检查相似性的任何列会改变,除了电话吗?这些是你试图比较的唯一字段吗? –

+0

是 - 只有EncounterID相似时才认为它们相似。甚至可能有两个不同的贾斯汀凯利,但除非EncounterID匹配,否则这些目的无关紧要。 –

回答

4

基本上需要的数据是一列中具有多个值的实体的数量。

这是最容易计算的列的基础上:

select sum(case when NumFirstNames <> 1 then 1 else 0 end) as DifferentFirstNames, 
     sum(case when NumLastNames <> 1 then 1 else 0 end) as DifferentLastNames, 
     sum(case when NumSSN <> 1 then 1 else 0 end) as DifferentSSN, 
     sum(case when NumPhone <> 1 then 1 else 0 end) as DifferentPhone  
from (select EncounterId, count(*) as Num, 
      count(distinct FirstName) as NumFirstNames, 
      count(distinct LastName) as NumLastNames, 
      count(distinct SSN) as NumSSN, 
      count(distinct Phone) as NumPhone 
     from table t 
     group by EncounterId 
    ) e; 

,只要你喜欢你可以格式化结果。

相关问题