"보다 완전한"중복을 선택하는 SQL 쿼리를 작성하려고합니다. 예를 들어 우리 테이블에 Name, Phone, Email, CompanyId 및 Both라는 두 개의 필드가있는 경우 & CompanyId는 두 개의 레코드가 같지만 그 중 하나에는 Phone 및/또는 Email이 있고 다른 레코드에는이 두 필드가 비어 있습니다 , 완료된 레코드 만 레코드 세트에서 사용할 수 있습니다."보다 완전한"중복 레코드를 선택하는 쿼리
나는 쿼리가 다운 된 줄 알았지 만 "더 완벽한"레코드가 존재하지 않는다면 그 레코드는 완전히 삭제되거나 레코드 세트에 중복 된 채로 남아있게됩니다 (쿼리 수정 방법에 따라 다름). 데이터 손실/복제가 발생하지 않는 더 나은 방법이 있는지 확신 할 수 없습니다. 지금 내가 생각할 수있는 것은 UNION
에 더 많은 다른 쿼리가 있지만 더 나은 방법이 있어야한다고 생각합니다. 나는 원시 데이터를 얻을 수있는 CTE를 사용하고 여기에 내가 중복 제거를 조작 할 노력하고있어 무엇을 해요 : 몇 쿼리를 unioning하는 것은 큰 문제가 아니다이 필요한 것 인 경우
;WITH Contacts AS (
-- LONG QUERY HERE THAT UNIONS NECESSARY Tables & XML Columns AND returns a recordset with Name, Email, Phone, and ClientId
)
SELECT u.* FROM Contacts u
INNER JOIN (
SELECT Name, ClientId, Count(*) AS ct FROM Contacts
GROUP BY Name, ClientId
HAVING COUNT(*) > 1
) AS g
ON u.Name = g.Name AND u.ClientId = g.ClientId
WHERE Phone IS NOT NULL AND Email IS NOT NULL
UNION
SELECT u.* FROM Contacts u
INNER JOIN (
SELECT Name, ClientId, Count(*) AS ct FROM Contacts
GROUP BY Name, ClientId
HAVING COUNT(*) = 1
) AS h
ON u.Name = h.Name AND u.ClientId = h.ClientId
을 , 아마 이것을 처리하는 더 좋은 방법이있는 것처럼 보입니다. 어떤 제안?
편집 : 샘플 데이터
쿼리 후Name | Phone | Email | ClientId
------------------------------------------------------
Person1 | NULL | NULL | 42
Person1 | 555-555-5555 | [email protected] | 42
Person2 | NULL | NULL | 21
Person2 | NULL | NULL | 21
Person3 | 555-555-5555 | NULL | 79
Person3 | NULL | NULL | 79
Person4 | 555-555-5555 | NULL | 49
Person4 | NULL | [email protected] | 49
Person5 | 555-555-5555 | NULL | 91
Person5 | 555-555-5555 | [email protected] | 91
Person6 | 555-555-5555 | NULL | 91
반환 데이터 집합 -
Name | Phone | Email | ClientId
------------------------------------------------------
Person1 | 555-555-5555 | [email protected] | 42
Person2 | NULL | NULL | 21
Person3 | 555-555-5555 | NULL | 79
Person4 | 555-555-5555 | [email protected] | 49
Person5 | 555-555-5555 | [email protected] | 91
Person6 | 555-555-5555 | NULL | 91
Person4 데이터의 병합은 이상적인 상황이지만, 반드시 대답 내가 찾고 있어요 없습니다 이 질문에. 이름 또는 이메일이 채워지는 한 가지 상황에서 데이터가 손실되지 않는 한 중복 된 데이터는 괜찮습니다.
당신이 데이터를 내가 실제 데이터를 표시 할 수 없습니다 – TheGameiswar
@TheGameiswar을 일부 실제 데이터를 보여 예상시겠습니까,하지만 난 내게 줄까지 약간의 조롱 것 몇 분. – JNYRanger
그게 도움이 될거야, 나는 실제 데이터를 쓸 때 샘플 데이터를 의미한다 – TheGameiswar