计算特定字段中一年中发生的次数

时间:2012-12-17 22:34:21

标签: sql ms-access

我有像FVS101209GO5这样的字符串存储在MS Access数据表中,我想计算特定年份的字符串数,所以在2010年的例子中

我在做

query = "SELECT SUM( IIF( Mid( KEYLastName, 4, 2) , 1,0)) AS occur FROM MyTable WHERE Year(mydate)=2010 ;"

对于@JW添加的示例

,字符串的长度为12或13
qwe123456XXX       -  2012
asd345678XXX       -  2034  
FVS101209GO5       -  2010

2 个答案:

答案 0 :(得分:1)

似乎KEYLastName中的第4和第5个字符代表一年的最后2位数字,因此“FVS101209GO5”代表2010年。如果这是正确的,您可以计算代表KEYLastName值的数量2010年,这两个查询中的任何一个:

SELECT Sum(IIf(Mid(KEYLastName, 4, 2) = "10", 1, 0)) AS occur
FROM MyTable;

SELECT Count(IIf(Mid(KEYLastName, 4, 2) = "10", 1, Null)) AS occur
FROM MyTable;

但是,我不确定为什么你还有一个WHERE子句将行限制为2010年mydate的行。如果你想要那样,也要在{{1上创建一个索引并在上述查询之一中包含此mydate子句。

WHERE

使用WHERE mydate >= #2010-1-1# AND mydate < #2011-1-1# 上的索引应该比要求数据库引擎将mydate函数应用于表中每一行的Year()值快得多。

答案 1 :(得分:1)

如果您希望在字符串中找到不同年份的出现次数,您可能希望使用:

SELECT Mid([KEYLastName],4,2) AS [Year], 
       Count(KEYLastName) AS CountOfOccurances
FROM MyTable
GROUP BY Mid([KEYLastName],4,2)

这将返回(4,2)处的所有两位数年份以及它们各自出现的次数。

编辑重新评论

SELECT KEYLastName, 
       Mid([KEYLastName],4,2) AS [Year], 
       DCount("*","MyTable","Mid([KEYLastName],4,2)=" 
          & Mid([KEYLastName],4,2)) AS YearCount
FROM MyTable