5

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

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

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

A131
A200
A236

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

4

2 回答 2

5

You could also use row_number() to get one row for each soundex(area) value:

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

See SQL Fiddle with Demo

于 2013-05-08T14:46:30.163 回答
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
;

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

于 2013-05-08T14:43:25.170 回答