2016-10-24 103 views
1

我一直在试图为客户设置简单的查询,以便将他们的产品表与批发商的价格目录进行匹配。我遇到的唯一问题是公司仅使用产品的SKU格式化了它们的商品,而定价商将它们列为MFC-SKU。我想出了一些方法来解决这个问题,但由于我是Access的新手,所以我的整体工作很困难。匹配不匹配的字段?

有没有人知道一种方法,我可以匹配两个字段具有相同的数字,但不匹配,否则?

作为一个例子,我想将Frigidaire.f1中的'3206165'与WeeklyPriceList.f1中的'WCI 3206165'进行匹配。他们没有相同的密钥ID,但他们确实在f2中有匹配的信息(但对我来说,并不足以让查询脱离该信息)。

任何信息都会有帮助,因为我完全陷在这里。非常感谢!

+0

一种先进的方法将使用'regex'(模式匹配)。但是对于一个简单的解决方案,可以使用“通配符”。我将检查文档,但可能是'%' –

回答

1

访问与ON子句相当受限制。除了相等之外,您不能使用任何表达式。

例如,在SQL Server中,你可以这样写:

SELECT Frigidaire.Description, Frigidaire.f1, WeeklyPriceList.Price 
FROM Frigidaire INNER JOIN WeeklyPriceList 
ON Frigidaire.f1 = 'WCI ' + WeeklyPriceList.f1 

随着访问您将需要WHERE子句中使用表的逗号分隔的列表的条件:

SELECT Frigidaire.Description, Frigidaire.f1, WeeklyPriceList.Price 
FROM Frigidaire, WeeklyPriceList 
WHERE 'WCI ' & Frigidaire.f1 = WeeklyPriceList.f1 
    OR 'SKR ' & Frigidaire.f1 = WeeklyPriceList.f1 

更新:正如其他人建议,你可以使用一个LIKE运营商,Mid()功能,或Right()功能,让您的结果:

SELECT Frigidaire.Description, Frigidaire.f1, WeeklyPriceList.Price 
FROM Frigidaire, WeeklyPriceList 
WHERE Frigidaire.f1 LIKE '%' & WeeklyPriceList.f1 

SELECT Frigidaire.Description, Frigidaire.f1, WeeklyPriceList.Price 
FROM Frigidaire, WeeklyPriceList 
WHERE Mid(Frigidaire.f1, 4) = WeeklyPriceList.f1 

SELECT Frigidaire.Description, Frigidaire.f1, WeeklyPriceList.Price 
FROM Frigidaire, WeeklyPriceList 
WHERE Right(Frigidaire.f1, Len(WeeklyPriceList.f1)) = WeeklyPriceList.f1 
+0

WHERE语句应该颠倒:WHERE WeeklyPriceList.f1 ='WCI'&Frigidaire.f1',因为额外文本在WeeklyPriceList字段中。 – geeFlo

+0

这个很好用,谢谢!像GEEFLO说的那样,WHERE语句反转了。 –

+0

我的意思是添加更多,但我没有意识到打进入会发送评论...那么,是否有办法为它可能增加多种可能性?例如,添加'WCI'或'SKT'和Frigidaire.F1。这听起来像你说的不可能,但可能在SQL Server中,这将是可能的? –

0

一个LIKE和通配符%也将工作。它可能不如其他答案那么快,但它将解释所有可能性。

SELECT Frigidaire.Description, Frigidaire.f1, WeeklyPriceList.Price 
    FROM Frigidaire, WeeklyPriceList 
    WHERE Frigidaire.f1 LIKE "%WeeklyPriceList.f1" 
+0

我还没有能够得到这个公式的工作。有没有我失踪的东西? –

+0

这实际上与上面的评论相同(在哪里需要交换的字段) –

+0

SELECT Frigidaire.Description,Frigidaire.f1,WeeklyPriceList.Price FROM Frigidaire,WeeklyPriceList WHERE WeeklyPriceList.f1 LIKE“%Frigidaire.f1” –

0

因为你是新来的访问,最简单的方法就是把你的表具有额外的“WCI”的信息,并创建正是复制了表的查询,但修剪掉的“WCI”信息领域。当你需要做任何匹配时,只需引用查询而不是表格。一旦您对查询,dlookups或SQL更加满意,则可以使用上述建议引用数据。

0

我可能会使用Mid函数结合InStr函数来隔离您需要的数字,然后允许您加入这两个字段。我认为使用这种方法遇到的唯一问题是数据类型不匹配,但使用Val函数将其转换为数字很容易。希望有所帮助!

0

您可以使用创建一个连接使用WHERE

SELECT 
    Frigidaire.Description, 
    Frigidaire.f1, 
    WeeklyPriceList.Price 
FROM 
    Frigidaire, 
    WeeklyPriceList 
WHERE 
    Frigidaire.f1 LIKE "*" & [WeeklyPriceList].[f1] & "*"