Office中国论坛/Access中国论坛
标题:
这种字符串怎么统计啊?(已解决,感谢版主)
[打印本页]
作者:
ghfmac
时间:
2009-3-31 15:16
标题:
这种字符串怎么统计啊?(已解决,感谢版主)
本帖最后由 ghfmac 于 2009-4-1 08:48 编辑
附件中的表,代码字段请看例子,我想统计下每行里含有Z1的有几条记录,含有Z2的几条,这种统计怎么弄啊?[attach]37040[/attach]
作者:
rjacky
时间:
2009-3-31 15:30
SELECT Sum(IIf(InStr([代码],"Z1")>0,1,0)) AS 含有Z1记录数, Sum(IIf(InStr([代码],"Z2")>0,1,0)) AS 含有Z2记录数
FROM 表1
复制代码
作者:
ghfmac
时间:
2009-4-1 08:47
本帖最后由 ghfmac 于 2009-4-1 09:03 编辑
谢谢版主,问题解决!但是在运行中发现个新问题,如果“z1”项统计时,会把“z11”也统计进去,这是为什么,不需要加模糊查询啊?
作者:
rjacky
时间:
2009-4-1 09:49
那么改成这样就可以了,不管是否有zz1还是z11等情况
SELECT Sum(IIf(InStr("," & [代码] & ",",",Z1,")>0,1,0)) AS 含有Z1记录数, Sum(IIf(InStr("," & [代码] & ",",",Z2,")>0,1,0)) AS 含有Z2记录数
FROM 表1
复制代码
作者:
ghfmac
时间:
2009-4-1 11:14
本帖最后由 ghfmac 于 2009-4-1 11:34 编辑
非常感觉版主的热心!问题彻底解决。
如果能有点注解就好不!
作者:
rjacky
时间:
2009-4-1 16:21
那么只能将问题回答到底了,先简单解释一下
在[代码]字段前后各加上一个逗号
"
,
" &
[代码]
& "
,
"
在[代码]字段前后各加上一个逗号后,用instr()函数判断是否含有
,z1,
InStr(
"," & [代码] & ","
,
"
,Z1,
"
)
如果InStr()>0,就是含有,则IIf(InStr()>0,1,0)=1,否则等于0
IIf(
InStr("," & [代码] & ",",",Z1,")
>0
,
1
,
0
)
含有就是1,不含有就是0,用sum()求和就是需要的结果
sum(
IIf(InStr("," & [代码] & ",",",Z1,")>0,1,0)
)
作者:
rjacky
时间:
2009-4-1 16:31
本帖最后由 rjacky 于 2009-4-1 16:38 编辑
具体思路:
对于计算机来说,zz11也包含了z1,所以也算作一条记录,所以关键问题是要区分z1和zz11。
1、在[代码]字段中,Z1的位置有4种
在开头 z1,……
在中间 ……,z1,……
在结尾 ……z1
单一个 z1
2、同样在[代码]字段中,诸如z11或zz1的位置也有4种
在开头 zz11,……
在中间 ……,zz11,……
在结尾 ……zz11
单一个 zz11
3、1和2两者的区别是: 真正的z1前面要么是空,要么是逗号,后面要么是空,要么就是逗号,共四种情况,在查询中来处理比较复杂,即使用vba编程也得用两个if来描述
4、要一步就能找出真正的z1,就得切换角度将问题转换一下,所以无论在[代码]字段中z1的位置如何,如果在字段前后都加上逗号
在开头
,
z1,……
,
在中间
,
……,z1,……
,
在结尾
,
……z1
,
单一个
,
z1
,
5、这样 2和4的区别就非常明显了
,z1,
和
zz11
是两个完全不同的字符串,一步就能准确区分开来,所以问题从"是否含有
z1
"变成"是否含有
,z1,
"
作者:
chaojianan
时间:
2009-4-1 16:39
学习了。
作者:
ghfmac
时间:
2009-4-3 10:05
相当感谢rjacky 的讲解,菜菜们有福了!
作者:
阿六爱狗
时间:
2009-4-3 10:14
看不懂,努力学
作者:
meteorxp
时间:
2009-4-9 09:15
谢谢!
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3