在单个列中组合相似的值

时间:2012-12-07 21:58:09

标签: sql

我有一个列用于列出我正在组合的表中的竞争对手名称。现在对这些输入的制作方式没有很多控制,并且会引起一些严重的问题。我们的数据中存在随机空间和拼写错误,但我们需要通过竞争对手列出数据。

作为一个例子(不是我正在使用的实际SQL),竞争对手列表:

Price Cutter
PriceCutter
PriceCuter
Price Cuter

如果我运行查询:

SELECT Competitor_Name, SUM(Their_Sales),
FROM Cmdata.Competitors
Where Their_Sales
Between 10000 AND 100000000
Group by Competitor_Name

我会为每个版本的Price Cutter获得一个不同的条目,这是我显然想要避免的。

我认为这个问题会出现很多,但我做了谷歌搜索并且干了。我承认,这个问题很难用几句话来表达,也许这就是为什么我没有带来任何东西。无论是那个还是这个基本我都应该知道......

(PS-是的,我们正在转向下拉菜单,但这需要一些时间。同时,是否有解决方案?)

3 个答案:

答案 0 :(得分:1)

您需要添加一个Competitor表,其中包含每个竞争对手的标准名称。

然后,在其他表中使用外键引用。

您面临的问题是数据清理和数据建模问题。解决起来并不是特别困难,但确实需要相当多的工作。您可以通过获取所有当前拼写的列表并将其标准化来开始 - 可能在Excel电子表格中。

如果这样做,您可以创建一个查找表并通过查找来更改值。

但是,从中期来看,您应该创建一个Competitor表并按照应用程序需要的方式对数据建模。

答案 1 :(得分:1)

这一般是一个非常难的问题。如果您的数据库支持它,您可以尝试按SOUNDEX(Competitor_Name)而不仅仅Competitor_Name进行分组。

实际上,Competitor_Name列应该是Competitors表中的外键,而不是裸文本字段。

无论你做什么修复,你都应该更新表格,以便将来不必进行这种跳跃。

答案 2 :(得分:1)

(我对语法有些模糊,但这很接近)

alter table Competitors add column cleanedName (varchar(100));

update Competitors set cleanedName = Replace(Upper(Competitor_Name), ' ', '')

然后按cleaningName而不是Competitor_Name

分组