SSN, 성 및 DOB의 마지막 4 개를 기준으로 데이터베이스에서 잠재적 인 중복 고객을 식별하려고합니다. 필자가 작성한 저장 프로 시저는 잠재적 중복을 식별하지만 한 행에 나열합니다.보고 이유에 따라 별도의 행으로 분할하려고합니다.다른 행에 중복 된 잠재적 인 중복
DECLARE
@StartDate DATE = '1/1/2017',
@EndDate DATE = '3/1/2017';
SELECT DENSE_RANK() OVER (ORDER BY c.socialSecurityNumber) AS [SSNRanking] ,
ROW_NUMBER() OVER (PARTITION BY c.socialSecurityNumber ORDER BY c.socialSecurityNumber) AS [RowNumb] ,
c.socialSecurityNumber AS [SSN],
c.id AS [CustomerID] ,
c.firstName AS [FirstName] ,
c.lastName AS [lastName] ,
c.birthDate [birthdate] ,
c.createDate AS [CreateDate] ,
c2.socialSecurityNumber AS [DupSSN] ,
c2.id AS [DupCustomerID] ,
c2.firstName AS [DupFirstName] ,
c2.lastName AS [DupLastName] ,
c2.birthDate AS [DupBirthDate] ,
c2.createDate AS [DupCreateDate]
FROM dbo.Customers AS [c]
INNER JOIN dbo.Customers AS [c2] ON (SUBSTRING(c.socialSecurityNumber,6,4) = SUBSTRING(c2.socialSecurityNumber,6,4) AND c.birthDate = c2.birthDate AND c.lastName = c2.lastName AND c.id <> c2.id)
LEFT JOIN dbo.CustomerAddresses AS [CA] ON c.id = CA.customerID
LEFT OUTER JOIN dbo.Common_Orders AS [co] ON co.customerID = c.id
WHERE
c.customerStatusTypeID <> 'M'
AND C2.customerStatusTypeID <> 'M'
AND c.mergedTo IS NULL
AND c2.mergedTo IS NULL
AND CAST(co.orderDate AS DATE) >= @StartDate
AND CAST(co.orderDate AS DATE) <= @EndDate
AND c.id = 1234439
GROUP BY c.socialSecurityNumber ,
c.id ,
c.firstName ,
c.lastName ,
c.birthDate ,
c.createDate ,
c2.socialSecurityNumber ,
c2.id ,
c2.firstName ,
c2.lastName ,
c2.birthDate ,
c2.createDate
ORDER BY CAST(c.socialSecurityNumber AS INT) ASC;
그리고 내 데이터 세트는 다음과 같습니다 :이 특정 인스턴스에서
SSNRanking RowNumb SSN CustomerID FirstName lastName birthdate CreateDate DupSSN DupCustomerID DupFirstName DupLastName DupBirthDate DupCreateDate
1 1 000009915 1234439 GREG GARRETT 1900-01-01 2014-02-25 000009915 1166084 ADAM GARRETT 1900-01-01 2013-08-29
, 나는 SSN 같은 마지막 4 두 명의 사용자가, 같은
내 T-SQL 보인다 동일한 성 및 동일한 DOB - 그러나 다른 이름.
어떻게이 두 레코드를 별도의 줄에 표시 할 수 있습니까? 이상적으로, 나는보고 싶다 :
SSNRanking RowNumb SSN CustomerID FirstName lastName birthdate CreateDate
1 1 000009915 1234439 GREG GARRETT 1900-01-01 2014-02-25
1 2 000009915 1166084 ADAM GARRETT 1900-01-01 2013-08-29
그러나 나는 이것이 동일한 테이블에 가입 할 때 어떻게 성취 할 수 있는지 잘 모르겠다. 제안?
문제의 두 테이블을 만들고 샘플 데이터를 삽입하는 스크립트에 연결하고 있습니다. 잘하면 받아 들일 만합니다 : SQL Script
테이블 정의 및 샘플 데이터를 제공 할 수 있습니까? –
확실히 - 기본 테이블 또는 결과 세트 테이블 정의 작업에 대한 테이블 정의가 필요합니까? – MISNole
기본 테이블은 있지만 문제를 복제하고 해결책을 제시하기에 충분할만큼 모든 열을 필요가 없습니다. –