Oracle中字符串统计问题:例如:
Id,xm,  bz
1,张三,'走路,开车,跑步'
2,李四,'跑步'
3,王五,'走路,开车'
求 count('走路') 共有多少?  '跑步'的数量,或者各分类各有多少 。能一句sql写出来嘛?

解决方案 »

  1.   


    select count(case instr(bz,'走路') when > 0 then 1 else 0 end) --走路的count
    from 表其它的依此类推,只有把‘走路’换成‘跑步’或其它的
      

  2.   


    with tab as(
    select 1 id,'张三' xm,'走路,开车,跑步' bz  from dual
    union all
    select 2,'李四','跑步' from dual
    union all
    select 3,'王五','走路,开车' from dual
    )
    select bz,Count(*) from (
      select distinct id,xm,regexp_substr(bz,'[^,]+',1,level) as bz
      from tab
      connect by
      level<=length(bz)-length(replace(bz,',',''))+1
    )
    group by bzBZ   COUNT(*)
    -----------------
    开车  2
    走路  2
    跑步  2
      

  3.   


    --1楼写法有误。
    select sum(case when instr(bz,'开车') > 0 then 1 else 0 end) count_kaiche
            ,sum(case when instr(bz,'走路') > 0 then 1 else 0 end) count_zoulu
            ,sum(case when instr(bz,'跑步') > 0 then 1 else 0 end) count_paobu
    from 表
      

  4.   

    select count(*) from 表 WHERE instr(bz,'走路') > 0
      

  5.   

    求 count('走路') 共有多少? '跑步'的数量,或者各分类各有多少 。能一句sql写出来嘛?
    这个分类至少应该有个数据表存储的吧,不然做到各分类各有多少很麻烦。
    同求高人解答。
      

  6.   

    regexp_substr,在10G中才有;Case有时不好用;最后改用Decode解决。