2012-04-09 4 views
0

면책 조항 - SQL Server에 대한 지식이 제한되어 있습니다. 그래서 이것이 '바보 같은'질문이라면 미리 사과드립니다.SQL Server 쿼리 및 중복

쿼리 목적 - 회사에서 사용하는 프로그램의 다중 테이블 데이터베이스에서 정보를 수집하고 결과를 웹 데이터베이스에 저장하여 일부 정보를 표시 할 수 있습니다.

문제 - 정보 중복. 문제의 일부는 데이터베이스에 여러 인력 인스턴스가 있다는 것입니다. 따라서 중복 된 결과가 있습니다 ... 다른 중복은 조인에서 비롯됩니다. 동일한 이름 또는 코드 (ID)로 결과 하나만 입금 할 수 있도록 결과를 결합해야합니다. 정보의 나머지 부분은 내가 필요로하는 정보를 잃지 않도록 결합하고 싶습니다.

SELECT people.Code AS [athlete-id], 
    people.Name AS [athlete-name], 
    people.DOB AS [DOB], 
    people.Division AS [agency-id], 
    certifs.[Expiration date] AS [expiration-date], 
    groups.Name AS [agency-name], 
    address.Addresses AS [address], 
    address.City AS [city], 
    address.State AS [state], 
    case when tags.Field = 'ABJD86GHKXXQWA9Q' 
     then tags.Value 
    end AS [restrictions], 
    case when tags.Field = 'VH2C78N9A15S059T' 
     then tags.Value 
    end AS [comments] 
FROM people 
LEFT OUTER JOIN certifs 
    ON people.Code = certifs.Owner 
LEFT OUTER JOIN groups 
    ON people.Division = groups.Code 
LEFT OUTER JOIN address 
    ON people.Code = address.Owner 
LEFT OUTER JOIN tags 
    ON people.Code = tags.Owner 
ORDER BY [agency-name], [athlete-name] 

날 당신이 가질 수있는 질문으로 알려 : 여기

내가 가진 쿼리입니다. 도움에 감사드립니다.

+0

왜 이것을 별도의 데이터베이스에 보관 하시겠습니까? 당신은 SQL Server 데이터베이스 자체를 쿼리 할 수 ​​있어야합니다 ... 또한'tags.Field'를 참조하는 방식으로 중복 행을 기대하는 것 같습니다 - 절을 JOIN 조건의 일부로 추가하십시오 (그리고 하나가 아닌 두 개의 테이블 참조를 사용하십시오). 중복 된 사람 데이터가있는 경우이 문제로부터 별도로 해결해야하는 문제입니다. –

+0

"여러 인조 인간"이 의미하는 바를 명확하게 설명해 주시겠습니까? 이는 동일한 이름 또는 코드 또는 둘 다를 가진 행을 의미합니까? "내가 결합하고 싶은 나머지 정보"는 무엇을 의미합니까? – PepperBob

+0

이들은 웹에서 액세스 할 수있는 데이터베이스가 존재하지 않기 때문에 별도의 데이터베이스에 보관해야합니다. cron 작업이 실행되면 ... 방화벽 창을 연 다음 정보를 별도의 데이터베이스에 덤프합니다. 예 : 이름 : Bill Jones ID : 12345 ... 반환 된 20 개의 결과와 동일합니다 ... 그러나 주소와 같은 다른 필드의 결과가 여러 다른 날짜로 반환됩니다 (주소 변경으로 인해)) 또는 여러 주석으로 인해 의견. –

답변

0

선택 직후와 사람 앞에 DISTINCT를 삽입하면 어떨까요? 코드?

SELECT DISTINCT 
people.Code [...] 
+0

내가 시도한 컬럼 중 일부가 ntext입니다. 어느 쪽도 비교할 수 없습니다. –

+0

Ok ... 그래서 select를하는 동안 ntext 문을 varchar로 변환하여 distinct ...를 사용하여 오류를 없애 버렸습니다. 그러나 여전히 중복을 얻고 있습니다. –

+0

당신은 "사람, 인증서, 그룹, 주소, 태그에서 사람/코드 = 인증서/사용자/사람/그룹/코드/사람/코드/주소. 소유자 및 사람들. 코드 = 태그. 소유자 ORDER BY [기관명], [운동 선수 이름] "이라고 표시하고 엔진이 처리 할 수 ​​있는지 확인하십시오 – CosminO