2017-01-27 43 views
-2

相似字符串我有表HumanNames的Oracle SQL發現使用探測法

輸入是

|HumanName  | 
|------------- | 
|Kamil   | 
|Azer   | 
|John   | 
|Elmir   | 
|Kamal   | 
|Elmar   | 
|Orxan   | 
|Elnar   | 

我需要寫的查詢,這將給像另一名結果名。 所需的輸出是

|NamesWhichLikes | 
|------------- | 
|Kamil,Kamal  | 
|Elmir,Elmar,Elnar| 
|     | 
+0

請編輯問題以闡明您需要的邏輯。因爲它是完全不清楚的 – Aleksej

+3

你如何定義類似?由不同的字符數量?考慮大寫/小寫? ... – Aleksej

+1

你說「卡米爾」類似於「卡邁勒」,「埃爾米爾」類似於「埃爾瑪」和「埃爾納爾」。爲什麼?您需要解釋所需結果背後的邏輯。 – Aleksej

回答

9

上名字的soundex試試這個使用listagggroup by

with your_table (HumanName) as (
select 'Kamil' from dual union all 
select 'Azer' from dual union all 
select 'John' from dual union all 
select 'Elmir' from dual union all 
select 'Kamal' from dual union all 
select 'Elmar' from dual union all 
select 'Orxan' from dual union all 
select 'Elnar' from dual 
) 
------ Test data setup ends here ------ 


select 
    listagg(humanname,',') within group (order by humanname) nameswhichlikes 
from your_table 
group by soundex(humanname) 
having count(*) > 1; 

產地:

+---------------------------+ 
| NAMESWHICHLIKES   | 
+---------------------------+ 
| Elmar,Elmir,Elnar   | 
+---------------------------+ 
| Kamal,Kamil    | 
+---------------------------+ 

重名的情況:

select 
    listagg(humanname,',') within group (order by humanname) nameswhichlikes 
from (select distinct humanname from your_table) 
group by soundex(humanname) 
having count(*) > 1; 
+0

它給出了錯誤的結果時,重新命名 –

+0

只需在子查詢中使用不同的人名,然後將其應用於上面 – GurV

+0

我不,t downvote –