第1个回答 2010-11-11
楼上两位写的没有考虑到WWSQ这种有两个W的。
我又写了一个,oracle10gr2已验证
数据如下
1 WWSQ WS SQ
2 WQ S Q
3 S Q WSQ
----------------------------------------------------------
select t2.vf,
sum((length(t1.D1) - length(replace(t1.D1, t2.vf))) / length(t2.vf)) D1,
sum((length(t1.D2) - length(replace(t1.D2, t2.vf))) / length(t2.vf)) D2,
sum((length(t1.D3) - length(replace(t1.D3, t2.vf))) / length(t2.vf)) D3
from tmp1 t1,
(select 'W' vf
from dual
union all
select 'S' vf
from dual
union all
select 'Q' vf from dual) t2
group by t2.vf
----------------------------------
结果为
W 3 1 1
Q 2 0 2
S 1 1 2
第2个回答 推荐于2016-11-29
select t2.vf,
D1=count(case when t1.D1 like '%'+t2.vf+'%' then 1 else null end),
D2=count(case when t1.D2 like '%'+t2.vf+'%' then 1 else null end),
D3=count(case when t1.D3 like '%'+t2.vf+'%' then 1 else null end) from table1 t1,(select vf='W' union select 'S' union select 'Q') t2
group by t2.vf
这样清楚点。
vf D1 D2 D3
----------------------------------------
Q 2 1 3
S 2 2 2
W 2 1 1本回答被提问者采纳
第3个回答 2020-03-12
建个临时表(字符名、字符个数两个字段),然后切割字符串,循环字符串中的字符和个数插入临时表。
关于字符个数计算:
在循环中用select
len('字符串')-len(replace('字符串','字符',''))