如何按有拼写错误的列分组

Kha*_*Ali 5 t-sql sql-server soundex group-by

在处理一些遗留数据时,我想在忽略拼写错误的列上对数据进行分组。我认为 SOUNDEX() 可以完成这项工作以达到预期的结果。这是我尝试过的:

SELECT soundex(AREA)
FROM MASTER
GROUP BY soundex(AREA)
ORDER BY soundex(AREA)
Run Code Online (Sandbox Code Playgroud)

但是(显然)SOUNDEX 在这样的结果行中返回了 4 个字符的代码,丢失了实际的字符串:

A131
A200
A236
Run Code Online (Sandbox Code Playgroud)

如何将组中的至少一个事件包含在查询结果中,而不是包含 4 个字符的代码。

fla*_*ost 5

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
;
Run Code Online (Sandbox Code Playgroud)

在 MySQL 中,您可以选择 group_concat(distinct AREA) 作为 list_area 来获取所有版本,而我在 SQL-Server 中不知道这一点,但是 min 和 max 给出了两个区域示例,无论如何您都想丢弃差异.


Tar*_*ryn 5

您还可以使用row_number()为每个soundex(area)值获取一行:

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
Run Code Online (Sandbox Code Playgroud)

参见SQL Fiddle with Demo