2014-06-23 3 views
0

이것은 간단한 해결책이 될 것 같지만 어떤 이유로이 문제를 해결할 수 없습니다.ms 액세스 조합 행

나는 기본 키가 USER_FULL_NAME이고 오른쪽에 다양한 메트릭이 약 15 개있는 테이블이 있습니다. 나는 어떤 경우에 복수 USER_FULL_NAME의 철자가 잘못되었지만 실제로 같은 행에 합산되어야합니다. 예. "David Hands"는 "Davide Handes"로, "Bobby Orr"은 "Boby Or"로 표기 할 수 있습니다. 테이블에는 대략 150 개의 행이 있지만 13636 개의 고유 한 USER_FULL_NAME이 있습니다.

어떻게 결합해야 USER_FULL_NAME가 실제로 결합 된 고유 한 136 행에 150 개의 행을 병합 할 SQL 쿼리를 작성할 수 있습니까 ??


I 매트릭스 테이블에 다른 열을 추가 한 USER_FULL_NAME 용과 DUPLICATE_USER_FULL_NAME 하나, TPS_User_names했다.

select 

tun.user_full_name, 

sum(ad.processed_mss) 

from all_data ad left join tps_user_names tun on ad.user_full_name = tun.user_full_name and ad.user_full_name = tun.duplicate_user_full_name 

where ad.user_full_name = 'A' and ad.user_full_name = 'A1' 

group by tun.user_full_name 
+1

다른 패턴에 대한 심각한 코딩 검사없이 실제로 이것을 자동화 할 방법이 없습니다. 당신은 그것을 실제로 생각하지 않고도 여러 패턴을 매우 빠르게 적용하고 있기 때문에 사람으로 볼 수 있습니다. 어떻게 코드에 넣으시겠습니까? 그냥 sCUS gBSA = David Hands를 알아 내려고 더 심하게 생각해보십시오. 나는 수동으로 데이터를 수정할 것이다. – SQLChao

+0

코딩 솔루션이 아니지만 중복 된 USER_FULL_NAME과 실제 USER_FULL_NAME, OUTER JOIN이라는 두 개의 열이있는 테이블을 만들 수 있으며 집계 할 때마다 acutal USER_FULL_NAME을 사용할 수 있습니다. 스키마를 다시 방문하거나 테이블 자체의 오류를 수정하는 것보다는 이것이 가장 좋은 방법입니다. 계속 발생하는 경우 코드를 변경하는 대신 행을 행렬 테이블에 추가합니다. – VBlades

+0

@VBlades는 왼쪽 가입을 의미합니까? MS 액세스에서 외부 조인을 수행 할 수 없습니다. – JT2013

답변

1

엄격한 코딩 솔루션은 아니지만, 중복 된 USER_FULL_NAME과 실제 USER_FULL_NAME의 두 열이있는 매트릭스 테이블을 만들고이 테이블을 LEFT JOIN하고 집계 할 때마다 실제 USER_FULL_NAME을 사용할 수 있습니다. 스키마를 다시 방문하거나 테이블 자체의 오류를 수정하는 것보다는 이것이 가장 좋은 방법입니다. 계속 발생하는 경우 코드를 변경하는 대신 행을 행렬 테이블에 추가합니다. (또한 매트릭스 테이블과 관련된 중간 단계를 사용하여 원래 테이블을 다시 정상화 할 수 있습니다. 주요 관계 문제는 제쳐두고 매트릭스를 생성하고 집계 된 쿼리를 가져온 다음 원본을 다시 삽입/업데이트 할 수 있습니다 테이블)

편집 :.

SELECT Nz(tun.user_full_name, ad.user_full_name) As user_full_name_agg, 
      SUM(ad.processed_mss) 
FROM  all_data ad LEFT JOIN tps_user_names tun 
      ON ad.user_full_name = tun.duplicate_user_full_name 
GROUP BY Nz(tun.user_full_name, ad.user_full_name); 

뉴질랜드 첫 번째 null이 아닌 선택됩니다 : 당신은 당신의 코드를 제공 한 것처럼, 여기 당신이 혼합으로 새로운 테이블을 통합 할 수 있습니다 수정은 tun.user_full_name의 값 또는 찾은 ad.user_full_name. 그래서 속임수의 경우에는 tun에서 찾은 통합 된 user_full_name을 사용하고 광고의 경우 다른 사람에게는 user_full_name을 사용합니다.

2

이 거의 바로 실제로 얻을 수있는 사소한 문제가 없다, 그것은 "비슷한 잡으려고 눈에 쉽게 할 수있다하더라도이 내가 마련했지만 보이지 않는다 쿼리가 작동하는 것입니다 따라서 동일한 이름으로 간주됩니다.

생각 해봐야 할 것입니다. 알고리즘 적으로이 작업을 수행하려는 경우 사용자 또는 컴퓨터가 전화를 걸어야하는 경계 사례가 많을 것입니다. Jon Smith는 John Smith와 동일하거나 Jon P Smith? 아마도. 아마.

다른 식별자가없는 한 알 수 없으므로 의미있는 집계를 얻는 데 어려움을 겪습니다. 퍼지 텍스트 매칭을 수행하는 한 가지 방법은 Levenshtein 거리를 계산하는 것입니다.이 방법은 두 문자열이 얼마나 가까운 거리에 있는지를 정량화하는 방법입니다. 그러나 언급 된 이유로 인해 여전히 오 탐률을 얻을 수 있습니다.

문제가 반복되는 경우 (잦은 업데이트가 필요한 경우) 데이터베이스 구조를 다시 생각하고 실제 이름이 아닌 기본 키를 갖고 새 항목이 테이블에 추가되었습니다. 가능하다면 새로운 사용자 이름을 다루는 지 판단하는 것이 이상적입니다.

1 회용으로, 중복이 있고 개별적으로 평가하는 16 개의 행을 쿼리합니다.

+0

+1, 나는 Mark와 결혼 한 친구 Mary K가 있었는데, 이로 인해 예약 시스템에서 문제가 발생했습니다. 매우 어려운 문제. – phaedra

+0

6 개의 user_full_name을 알고 있고 수동으로 유지 관리하고 싶습니다 ...이 쿼리를 작성하는 최선의 방법은 무엇입니까? – JT2013