2012-12-17 127 views
1

我有类似FVS101209GO5的字符串存储在MS Access数据表中,我想计算某一年的字符串数,因此在2010年的示例中统计特定字段在一年内出现的次数

我正在做

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

字符串的长度为12或13,对于实施例@JW加入

qwe123456XXX  - 2012 
asd345678XXX  - 2034 
FVS101209GO5  - 2010 
+0

canyou给你想要的结果,例如,如果你有这样的记录,'qwert123','asd345','FVS101209GO5',会有怎样的输出呢? –

+0

也许使用'GROUP BY'? – paddy

回答

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 
+0

这是非常有用的,有没有办法将KEYLastName本身添加到结果中?所以结果表将包含3个字段,KEYLastName,Year和CountOfOcurrances? – cMinor

+0

我猜你有很多不同的KEYLastName包含同一年的字符串,所以你不能简单地在它上面添加KEYLastName和Group。我已经添加了一个可能适合的建议。 – Fionnuala

1

似乎在的第四和第五个字符代表最后2个位数的一年,所以“FVS101209GO5”是在2010年。如果这是正确的,你可以指望它代表2010年这两种2个查询KEYLastName值的数目:

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; 

然而,我'm不确定为什么你还有一个WHERE子句将行限制为mydate从2010年开始的那些行。如果您也希望在mydate上创建一个索引,并在上述查询之一中包含此WHERE子句。

WHERE mydate >= #2010-1-1# AND mydate < #2011-1-1# 

随着mydate的指数应该是比要求的数据库引擎的Year()功能,从下表中的每一行应用于mydate值快得多。

相关问题