2014-01-08 111 views
1

我试图在Access中构建一种“模糊逻辑”系统。在字段中选择每个值的第一条记录

基本上我有一组数据,该字段为“提供者”,但在数据源输入的“提供者”可以隐藏在其他文字,或缩写的方式。

我有我已经确定了供应商,他们实际上都是不同的文本字符串和另一个表。

因此,例如提供 “Flynet” 可以输入

  • flynet
  • 成名flynet
  • flynet.com
  • FameFlynet.uk.com
  • 成名

到目前为止,我已经到了可以获取通过规范化提供程序的数据表的位置,或者如果没有与我确定的那些关键字匹配,那么它会通过提供程序中的原始值领域。

但是,如果它与提供者文本中的多个关键字匹配,则会返回多条记录,即作为fameflynet输入的记录将由“flynet”和“fame”关键字拾取并出现两次。

如何限制它,这样我只得到1个记录每个记录原始数据返回?

我目前使用2个查询来到我所在的位置。

SELECT [Weekly Data].ID, Keywords.Return 
FROM Keywords, [Weekly Data] 
WHERE ((([Weekly Data].Provider) Like "*" & [keywords].[lookup] & "*")); 

然后

SELECT [Weekly Data].ID, IIf([Q_Key_Search]![Return]<>"",[Q_Key_Search]![Return],[Weekly Data]![Provider]) AS Act_Provider 
FROM [Weekly Data] LEFT JOIN Q_Key_Search ON [Weekly Data].ID = Q_Key_Search.ID; 
+0

你试过SELECT DISTINCT? – Fionnuala

+0

我做了感谢,但无法让它工作。 – WillSimmo

回答

0

我已经到了那里,但我使用4个查询....

首先检查是否存在关键字匹配。

Q_Key_Search

SELECT [Weekly Data].ID, Keywords.Return 
FROM Keywords, [Weekly Data] 
WHERE ((([Weekly Data].Provider) Like "*" & [keywords].[lookup] & "*")); 

第二然后带回或者如果我发现了一个匹配归一化的提供者,还是原来的值,如果没有。

Q_Consol

SELECT [Weekly Data].ID, IIf([Q_Key_Search]![Return]<>"",[Q_Key_Search]![Return],[Weekly Data]![Provider]) AS Act_Provider 
FROM [Weekly Data] LEFT JOIN Q_Key_Search ON [Weekly Data].ID = Q_Key_Search.ID; 

第三则摆脱重复的,带回在综合提供商领域的第一个值。

Q_Dedupe

SELECT Q_Consol.ID, First(Q_Consol.Act_Provider) AS FirstOfAct_Provider 
FROM Q_Consol 
GROUP BY Q_Consol.ID; 

第四是最终的结果,每标准化提供商的记录数。

Q_Count

SELECT Count(Q_Dedupe.ID) AS CountOfID, Q_Dedupe.FirstOfAct_Provider 
FROM Q_Dedupe 
GROUP BY Q_Dedupe.FirstOfAct_Provider 
ORDER BY Count(Q_Dedupe.ID) DESC; 

我敢肯定有一个更优雅的解决方案,但工程....

相关问题