匹配MS Access 2003中的类似/相似的列条目

时间:2012-08-09 12:47:37

标签: sql regex ms-access

我所追求的是基于MS Access的数量工作总结,在MS Access中使用sql,这就是我想要做的:

Sum(IIf(([Time Report].Destination) Like 'D-[Time Report].[Baselocation]',0)) AS [Total WorkFromBase in P2]

这不起作用,因为MS Access不理解正则表达式,我需要附加'D-'才能匹配。

我的选择是我所知道的:

  1. 学习并使用VB宏(?)来使模式匹配正确
  2. 使用一组复杂的IIf语句,因为sql没有本地else if条件
  3. 我不懂VB,而且我只见过一个example,这是我无法理解的。

    如果我选择了大量的IIfs,那么我会有类似的东西

    Sum(
        IIf(D-[Time Report].[Baselocation] = 'Base1', IIf(
            ([Time Report].Destination) = 'D-Base1',
        IIf(D-[Time Report].[Baselocation] = 'Base2', IIf(
            ([Time Report].Destination) = 'D-Base2',
        IIf(D-[Time Report].[Baselocation] = 'Base3a', IIf(
            ([Time Report].Destination) = 'D-Base3a' OR ([Time Report].Destination) = 'D-Base3b',
        IIf(D-[Time Report].[Baselocation] = 'Base3b', IIf(
            ([Time Report].Destination) = 'D-Base3a' OR ([Time Report].Destination) = 'D-Base3b',    ))
    )) AS [Total Work From Base in P1],
    

    然后我最终遇到Syntax Error (Missing operator)类型错误,

    那么我怎样才能匹配两个柱子,并在它们相似时求和?

2 个答案:

答案 0 :(得分:1)

为什么不在查询中列出可能性和参考?

 If D-[Time Report].[Baselocation] = 'Base1' IN (SELECT Bases FROM NewTable)

 SELECT D-[Time Report].[Baselocation], NewTable.Destination 
 FROM D-[Time Report] 
 INNER JOIN Newtable
 ON D-[Time Report].[Baselocation] = NewTable.Bases 

其中NewTable包含位置列表以及该基础映射到的位置。

您也可以使用LIKE或ALIKE运算符:

IIf(D-[Time Report].[Baselocation] LIKE '*Base1*'

一些参考文献:

Fundamental Microsoft Jet SQL for Access 2000
Intermediate Microsoft Jet SQL for Access 2000
Advanced Microsoft Jet SQL for Access 2000

答案 1 :(得分:1)

...我需要附加'D-'才能匹配。

您可以将“D-”连接到[Baselocation],然后使用等于而不是Like比较。

[Time Report].Destination) = "D-" & [Time Report].[Baselocation]

但是IIf()表达式包含3个参数。

IIf(expr, truepart, falsepart)

在您的示例中,您只提供了2个参数AFAICT。我想您希望Sum()[amount worked]expr时包含一些值(True?),在exprFalse时为零。也许是这样......

Sum(IIf(([Time Report].Destination) = "D-" & [Time Report].[Baselocation], [amount worked, 0)) AS [Total WorkFromBase in P2]