2017-03-31 2 views
0

직원의 레코드가 있는데도 내 쿼리에서이 직원의 레코드가 두 개 반환됩니다. 주소 열이 2에서 다르므로이 문제를 해결할 수있는 방법은 무엇입니까? 문제? 할 수있는 일인가요? EMP_ID, CUS_LAST_NAME, CUS_FIRST_NAME 및 GUARDIAN_ADDRESS는 3 개의 개별 테이블에 있습니다.열 중 하나에서 잘못된 데이터로 인해 중복 데이터가있는 레코드를 반환하는 쿼리

예 :

ID   EMP_ID  CUS_LAST_NAME CUS_FIRST_NAME GUARDIAN_ADDRESS 
00000000 11111111 Jackson   Michael   1111 Street Apt 1 

ID   EMP_ID  CUS_LAST_NAME CUS_FIRST_NAME GUARDIAN_ADDRESS 
00000000 11111111 Jackson   Michael   1111 Street   
+0

당신이 볼 수있는 주소의 어떤을 원하는가? 먼저? 가장 최근? 흐름? –

+2

어떻게하면이 문제를 해결할 수 있을까요? 우리에게 db 스키마, 샘플 데이터 및 예상 출력을 보여주십시오. \t [** How-to-Ask **] (http://stackoverflow.com/help/how-to-ask) \t \t 그리고 [** 시작 **] (http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/) 질문 품질을 향상시키고 더 나은 답변을 얻는 방법을 배우십시오. –

+0

동일한 EMP_ID를 가진 직원 기록이 다른 이유는 무엇입니까? Employee와 별도로 주소가 저장되어 있습니까? – Jerrad

답변

0

빠른 더러운 방법 max()과 :

select id, emp_id, emp_last_name, emp_first_name, max(address) as address 
from employees 
group by id, emp_id, emp_last_name, emp_first_name 

대체 사용 : top with ties

select top 1 with ties 
    id, emp_id, emp_last_name, emp_first_name, address 
from employees 
order by row_number() over (partition by emp_id order by address desc) 

rextester 데모를 모두 : http://rextester.com/EGGA75008

+0

여전히 중복을 보여줍니다. 두 주소가 모두 나타났습니다. – EkansDasnakE

+0

@EkansDasnakE Rextester 데모 : http://rextester.com/EGGA75008 – SqlZim

0

당신이 집계 함수를 사용할 수있는 선택 복귀를 해결하는 문제가되지 않는 경우에 당신이 어떤 직원 감지하려는 경우 하나 개의 행만을

select ID , EMP_ID , EMP_LAST_NAME, EMP_FIRST_NAME, min(ADDRESS) 
from my_table 
group by ID , EMP_ID , EMP_LAST_NAME, EMP_FIRST_NAME 
+0

여전히 중복 된 것을 보여줍니다. 두 주소가 모두 나타났습니다. – EkansDasnakE

+0

불가능 ... 사용자가 쿼리 또는 사용자 데이터를 확인하십시오. 사용중인 정확한 쿼리와 적절한 데이터 샘플을 표시하십시오. – scaisEdge

+0

죄송합니다. 질문을 편집했습니다. – EkansDasnakE

0

을 얻기 위해 당신이 두 중 하나를 삭제할 수없는 경우 항목을 복제합니다.

SELECT * 
FROM employees 
WHERE EMP_ID IN (
    SELECT EMP_ID 
    FROM employees 
    GROUP BY EMP_ID 
    HAVING COUNT(*) > 1 
    ) 
0
--start with unique list of clients 
    SELECT DISTINCT a.ID, a.EMP_ID, e.EMP_LAST_NAME, e.EMP_FIRST_NAME,  e.ADDRESS 
FROM TABLE1 a 
--attach on employee data on id 
    OUTER APPLY (SELECT TOP 1 b.EMP_LAST_NAME, b.EMP_FIRST_NAME, b.ADDRESS 
    FROM TABLE2 b 
    WHERE a.id = b.id 
--use order by clause to change order and choose what top employee record u  want to choose 
    ORDER BY b.address 
    ) e 
관련 문제