选择字段中每个值的第一个记录

时间:2014-01-08 15:39:42

标签: sql ms-access

我正在尝试在Access中构建一种“模糊逻辑”系统。

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

我有另一个表格,其中包含我已识别的所有不同文本字符串以及它们实际上属于哪个提供程序。

因此,例如,提供者“Flynet”可以作为

输入
  • flynet
  • fame 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;

1 个答案:

答案 0 :(得分: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;

我确信这是一个更优雅的解决方案,但它有效......