2013-05-08 6 views
4

일부 레거시 데이터로 작업하는 동안 맞춤법 오류를 무시한 채 열에 데이터를 그룹화하려고합니다. SOUNDEX()가 원하는 결과를 얻기 위해 작업을 수행 할 수 있다고 생각합니다. 여기에 내가 뭘하려 :맞춤법 오류가있는 열별로 그룹화하는 방법

SELECT soundex(AREA) 
FROM MASTER 
GROUP BY soundex(AREA) 
ORDER BY soundex(AREA) 

그러나 (분명히)이 SOUNDEX,이 같은 결과 행 4 문자 코드를 반환 실제 문자열을 잃어버린 : 나는 적어도 하나 명의 발생에서있을 수 있습니다 어떻게

A131 
A200 
A236 

을 그룹을 4 문자 코드 대신 쿼리 결과로 변환합니다.

+2

를 참조하십시오. – Serge

+2

+1 분명한 질문을하고 내가 모르는 기능에 대해 가르쳐주었습니다. – Bryan

답변

4
SELECT soundex(AREA) as snd_AREA, min(AREA) as AREA_EXAMPLE_1, max(AREA) as AREA_EXAMPLE_2 
from MASTER 
group by soundex(AREA) 
order by AREA_EXAMPLE_1 
; 
모든 버전을 얻을 list_area로 GROUP_CONCAT (별개의 영역)을 선택 수 있으며, 내가 SQL-Server의 그것에 대해 잘 모르지만, 최소 및 최대가 지역의 두 가지 예를 제공 MySQL의에서

및 당신은 어차피 diffs를 버리고 싶었습니다.

+0

그것은 효과가 있었지만 놀라운 결과를 보였습니다. 예를 들어, soundex()는 NORTH NAZ 및 NORTH KAR, P.I.B를 그룹화합니다. 및 P.E.C.H, SHAH FAISAL 및 S.I.T.E도 동일하다. ??? !!!! –

+0

어쩌면 SQL 서버에서 soundex 기능을 제어 할 수 있습니다. 나는 단지 MySQL에 접근 할 수 있고 soundex ("NORTH NAZ") = N6352, soundex ("NORTH KAR"= N6326 또는 어쩌면 다른 soundex 함수를 사용할 수있다.) – flaschenpost

+0

문자열에서 공백을 제거하려고 시도했다. (NORTHNAZ 및 NORTHKAR)이지만 실제로 SOUNDEX()이 너무 느슨하게 매칭, 예를 들면, 다음과 같은 문자열이 동일한 SOUNDEX 코드를 생성;. 가 COL1 조합으로 SOUNDEX ( 선택 'GULBAHAR'로부터 (COL1), COL1 을 선택 <<< ALL은 가 COL1 조합으로 SOUNDEX ( 선택 'GULSHANEIQBAL'로부터 (COL1), COL1 을 선택 <<< ** >>> 'GULBERG' ) t를 선택 ALL 을 선택하십시오 'GULSHANEMAYMAR' ) t >>> ** 이 아이디어에 대한 새로운 의견이 있습니까? –

4

또한 각 soundex(area) 값을 하나 개의 행을 얻을 row_number()을 사용할 수

select AREA, snd 
from 
(
    select AREA, soundex(AREA) snd, 
    row_number() over(partition by soundex(AREA) 
         order by soundex(AREA)) rn 
    from master 
) x 
where rn = 1 

가 flaschenpost 응답으로 트릭을 할 것 MIN (또는 MAX) 영역을 사용 SQL Fiddle with Demo

+0

귀하의 솔루션에는 해당 그룹의 어커런스가 포함되지 않습니다. 나는 행 번호를 원하지 않았다. –

+0

@ Ali.NET 귀하는이 작업을 수행하는 각 그룹에서 하나의 값을 받기를 요청했습니다. 데모 보셨어요? – Taryn

+0

알았어. 그것은. 감사. :) –