1

我有一列用于在我整理的表格中列出竞争对手的姓名。现在对这些输入的产生方式没有太多控制,这会引起一些严重的头痛。我们的数据中存在随机空格和拼写错误,但我们需要按竞争对手列出数据。

作为示例(不是我使用的实际 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- 是的,我们正在转向下拉菜单,但这需要一些时间。同时,有解决方案吗?)

4

3 回答 3

1

您需要添加一个Competitor表,该表具有每个竞争对手的标准名称。

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

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

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

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

于 2012-12-07T22:01:04.310 回答
1

总的来说,这是一个非常困难的问题。如果您的数据库支持它,您可以尝试分组SOUNDEX(Competitor_Name)而不是Competitor_Name.

实际上,无论如何,该Competitor_Name列都应该是Competitors表中的外键,而不是纯文本字段。

无论你做什么来修复,你也应该更新表,这样你以后就不必做这种跳楼了。

于 2012-12-07T22:01:21.857 回答
1

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

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

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

然后按 cleanName 而不是 Competitor_Name 分组

于 2012-12-07T22:03:37.670 回答