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

Sql server 如何按有拼写错误的列分组,sql-server,tsql,group-by,soundex,Sql Server,Tsql,Group By,Soundex,在处理一些遗留数据时,我希望将数据分组到一列中,忽略拼写错误。我认为SOUNDEX()可以完成这项工作以达到预期的效果。以下是我尝试过的: SELECT soundex(AREA) FROM MASTER GROUP BY soundex(AREA) ORDER BY soundex(AREA) 但是(显然)SOUNDEX在如下结果行中返回了4个字符的代码,丢失了实际字符串: A131 A200 A236 如何将组中的至少一个匹配项包含到查询结果中,而不是包含4个字符的代码 SELECT s

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

SELECT soundex(AREA)
FROM MASTER
GROUP BY soundex(AREA)
ORDER BY soundex(AREA)
但是(显然)SOUNDEX在如下结果行中返回了4个字符的代码,丢失了实际字符串:

A131
A200
A236
如何将组中的至少一个匹配项包含到查询结果中,而不是包含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
;

在MySQL中,您可以选择group_concat(distinct AREA)作为list_AREA来获取所有版本,我在SQL Server中不知道这一点,但min和max给出了两个区域的示例,并且您仍然希望放弃差异。

您还可以使用
行编号()
为每个
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

请参见

使用最小(或最大)面积可以达到flaschenpost.+1回答的效果。有一个明确的问题,可以教我一个我不知道存在的函数。它确实有效,但结果令人惊讶。例如,soundex()将北纳兹和北卡尔、P.I.B.和P.e.C.H、SHAH FAISAL和S.I.T.e.分组为同一组!!!!也许您可以控制SQL Server中的soundex函数。我只能访问MySQL,在那里我得到了soundex(“NORTH NAZ”)=N6352,soundex(“NORTH KAR”=N6326。或者可能有不同的soundex函数可用。我尝试从字符串(NORTHNAZ和NORTHKAR)中删除空格,但实际上是soundex()匹配太松散。例如,以下字符串产生相同的SOUNDEX代码;>*****有什么想法,或者我必须为此另一个问题创建新线程吗?您的解决方案不会包含组中的任何事件。我不希望row number.@Ali.NET您请求从每个组接收一个值,这会发生。您看到演示了吗?