我所追求的是基于MS Access的数量工作总结,在MS Access中使用sql,这就是我想要做的:
Sum(IIf(([Time Report].Destination) Like 'D-[Time Report].[Baselocation]',0)) AS [Total WorkFromBase in P2]
这不起作用,因为MS Access不理解正则表达式,我需要附加'D-'才能匹配。
我的选择是我所知道的:
else if
条件我不懂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)
类型错误,
那么我怎样才能匹配两个柱子,并在它们相似时求和?
答案 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
?),在expr
为False
时为零。也许是这样......
Sum(IIf(([Time Report].Destination) = "D-" & [Time Report].[Baselocation], [amount worked, 0)) AS [Total WorkFromBase in P2]