我有一个列用于列出我正在组合的表中的竞争对手名称。现在对这些输入的制作方式没有很多控制,并且会引起一些严重的问题。我们的数据中存在随机空间和拼写错误,但我们需要通过竞争对手列出数据。
作为一个例子(不是我正在使用的实际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-是的,我们正在转向下拉菜单,但这需要一些时间。同时,是否有解决方案?)
答案 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
分组