2017-03-08 1 views
1

하나의 테이블에 '성', '성', '도브', '번호'의 4 개의 열이 있습니다 고유 한 '이름'과 '성' 동일하거나 서로 다른 '수'와 '생년월일'을 가질 수있는 것은열 값을 기반으로 고유 한 행을 선택하십시오.

FirstName LastName Dob   Number 
Alice  Smith  02/03/77 0876543 (require) 
Alice  Smith  Null  0876543 (Not require) 
Alice  Smith  Null  Null  (Not require) 
John  Adam  11/28/63 3265783 (require) 
John  Adam  11/28/63 Null  (Not Require) 
John  Adam  05/15/58 Null  (require) 
Sally  Smith  Null  Null  (require) 

내가 별개의 행을 원하는 값하지만 중 하나를 'Number'or'생년월일 '은 같은 FIRSTNAME의 다른 레코드와 일치하는'나도 하나의 레코드 만 필요 'LastName' 위의 예제에서 'require'라는 레이블이있는 행을 찾습니다. 내가 시도한 조합은 그들이 생각한 결과를 얻지 못했습니다. 감사

+0

사용중인 데이터베이스에 질문에 태그를 답니다. 또한 원하는 결과 세트를 표시하십시오. 그리고'Alice Smith 2000-01-01 0876543'과'Alice Smith 2001-01-01 1234567'을 가지고 있다면 어떨까요? –

+1

데이터베이스 테이블에서 어떻게 이런 종류의 데이터로 끝났습니까? 나는 호기심을 묻는 것이지 비평이 아니다. 솔루션을 얻을 수도 있지만 이와 같은 상황을 피하기 위해이 데이터 집합을 구성하는 더 좋은 방법이있을 수 있습니다. – zedfoxus

+0

어떤 데이터베이스를 사용하고 있습니까? 그것이 무엇이든간에 질문에 태그를 붙이십시오. 또한 작동하지 않거나 컴파일하는 경우에도 쿼리를 표시하십시오. – Bohemian

답변

0

내가 처음 네 개의 필드가 채워 가지고 모든 행을 선택합니다 :

SELECT DISTINCT FirstName, LastName, Dob, Number 
FROM customers 
WHERE Dob IS NOT NULL And Number IS NOT NULL 

그럼 내가 첫 번째 선택에 존재하지 않는 NOT NULL 값으로 선택에 레코드를 추가 할을 :

with RequiredSet as (
SELECT DISTINCT FirstName, LastName, Dob, Number 
FROM customers 
WHERE Dob IS NOT NULL And Number IS NOT NULL 
), AdditionalSet as (
SELECT distinct c.FirstName, c.LastName, c.Dob, c.Number 
FROM customers c 
WHERE Dob IS NOT NULL And NOT EXISTS(SELECT 1 
    FROM RequiredSet r 
    WHERE r.FirstName = c.FirstName And r.LastName=c.LastName And r.Dob=c.Dob) 
OR Number IS NOT NULL And NOT EXISTS(SELECT 1 
    FROM RequiredSet r 
    WHERE r.FirstName = c.FirstName And r.LastName=c.LastName And r.Number=c.Number) 
) 
SELECT FirstName, LastName, Dob, Number 
FROM RequiredSet 
UNION ALL 
SELECT FirstName, LastName, Dob, Number 
FROM AdditionalSet 
+0

고마워요, 제가 시도해 볼게요. – mssstack1

+0

여전히 중복 행을 가져 오는 중입니다. 쿼리가 너무 오래 걸립니다. 고유 한 행 수를 또한 얻는 것이 가능합니다. 감사합니다 – mssstack1

+0

첫 번째 쿼리를 Required 테이블을 임시 테이블에 추가하고 두 번째 쿼리를 다른 임시 테이블에 추가하면 속도가 크게 빨라질 수 있습니다. 중복을 수정해야하는 두 번째 쿼리에 Distinct를 추가합니다. – cha

관련 문제