如何在SQL中按拼写错误的记录进行分组

时间:2017-12-28 13:13:12

标签: c# sql sql-server

我正在寻找有关如何解决同名拼写问题的建议。我有一个带有作业位置的SQL Server数据库,并且有一些名称相同但拼写不同。虽然使用明显得到如下,但所有都是相同的位置

例如:

  • 前雇员 - SBM(学生品牌经理)
  • 前雇员 - SBM
  • 前雇员 - 学生品牌经理
  • 前雇员 - 学生品牌经理(SBM)

就像上面有很多记录一样,有时它是一个额外的's',有时它是一个额外的空间。

注意:这些位置会在下拉列表中显示如何分组和显示,而点击该名称我想获取所有没有数据丢失的记录。

3 个答案:

答案 0 :(得分:4)

这是一个难题。

我的建议是从所有不同职位的列表开始:

select distinct job_position
from t;

然后,将其加载到电子表格中并手动输入正式名称。然后将其加载回数据库,并在更新和插入作业位置时使用它 - 如果某个位置不在表中,则拒绝它。

然后您可以加入该表以获取正式版本。

答案 1 :(得分:1)

不是建议使用它,但您还应该能够根据更改后的值对结果进行分组,例如:

group by (CASE WHEN name like 'SBM%' or name like 'Student Brand Manager%' THEN 'SBM' END)

同样的解码也需要出现在Select语句中(如果你想看到名字)

答案 2 :(得分:1)

我通常会创建一个映射表来永久修复它。 我通常在查询中使用的快速修复是编写如下视图:

Select 
Case when [Job Position] like '%Former Employee - SBM%' OR [Job Position] like '%Former Employee - Student Brand Manager%'
THEN 'SBM'
ELSE [Job Position] END as 'Job Position'
,[Field 2], [Field 3], ...

FROM TABLENAME

OR

Select 
Case when [Job Position] in ('Former Employee - SBM (Student Brand Manager)','Former Employee - SBM','Former Employee - Student Brand Manager','Former Employee - Student Brand Manager (SBM)')
THEN 'SBM'
ELSE [Job Position] END as 'Job Position'
,[Field 2], [Field 3], ...

FROM TABLENAME