sql统计的特定字符串出现次数

我有一个表格如下
id D1 D2 D3
1 WSQ WS SQ
2 WQ S Q
3 S Q WSQ
现在我想分别统计D1中W,S,Q出现的次数,D2中W,S,Q出现的次数,,D3中W,S,Q出现的次数
代码稍微写详细点 谢谢

假设表名是t
select t.d1,count(*) from t where d1 like '%W%' group by t.d1 得出D1列W的出现次数
select t.d1,count(*) from t where d1 like '%S%' group by t.d1 得出D1列S的出现次数
select t.d1,count(*) from t where d1 like '%Q%' group by t.d1 得出D1列Q的出现次数
剩下D2,D3使用同法
温馨提示:内容为网友见解,仅供参考
第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('字符串','字符',''))
相似回答