统计某字段里面的信息个数,怎么写呢?

iBobbySun 2009-08-03 12:58:35
种类表
编号 名称
01 游泳
02 跑步
03 瑜伽
04 单车
05 力量训练
06 太极
07 双截棍
08 跆拳道

人员信息
编号 从事项目
001 08,01,06,
002 02,03,04,
003 05,08,
004 08,07
005 03,04,01
006 02,06,01,05
007 01,02,
008 02,

统计
编号 项目数量
001 3
002 3
003 2
004 2
005 3
006 4
007 2
008 1


我想要的效果是,根据“人员信息”表中的列举信息,统计出每个人所进行的项目数量,如“统计”中显示的。

谢谢各位大大!
...全文
118 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼W 2009-08-03
  • 打赏
  • 举报
回复

select 编号,length(translate(从事项目,',0123456789',',')) 数量 from test_d


刚开始看题,被领导叫去干活。看来楼主已经解决问题了,把我的代码贴上
iBobbySun 2009-08-03
  • 打赏
  • 举报
回复
非常感谢!
chinesesword 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 opps_zhou 的回复:]
如果能保证每个项目后都有一个 “,” 作为结束的话,这个很容易

人员信息
编号 从事项目
001 08,01,06,
002 02,03,04,
003 05,08,
004 08,07
005 03,04,01
006 02,06,01,05
007 01,02,
008 02,

假设这张表名为 test 编号为 id, 从事项目字段为 value

select id, length(value) - length(replace(value, ',', '')) as icount from test;


SQL> select * from test;

ID        VALUE
---------- --------------------
001        08,01,06,
002        02,03,04,
003        05,08,
004        08,07,
005        03,04,01,
006        02,06,01,05,
007        01,02,
008        02,

8 rows selected

SQL> select id, length(value) - length(replace(value, ',', '')) as icount from test;

ID            ICOUNT
---------- ----------
001                3
002                3
003                2
004                2
005                3
006                4
007                2
008                1

8 rows selected

SQL>
[/Quote]

=========
帅啊!
opps_zhou 2009-08-03
  • 打赏
  • 举报
回复
如果能保证每个项目后都有一个 “,” 作为结束的话,这个很容易

人员信息
编号 从事项目
001 08,01,06,
002 02,03,04,
003 05,08,
004 08,07
005 03,04,01
006 02,06,01,05
007 01,02,
008 02,

假设这张表名为 test 编号为 id, 从事项目字段为 value

select id, length(value) - length(replace(value, ',', '')) as icount from test;


SQL> select * from test;

ID VALUE
---------- --------------------
001 08,01,06,
002 02,03,04,
003 05,08,
004 08,07,
005 03,04,01,
006 02,06,01,05,
007 01,02,
008 02,

8 rows selected

SQL> select id, length(value) - length(replace(value, ',', '')) as icount from test;

ID ICOUNT
---------- ----------
001 3
002 3
003 2
004 2
005 3
006 4
007 2
008 1

8 rows selected

SQL>
iBobbySun 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhangchu_63 的回复:]
使用分割符","
不过看你数据,分割符好象没规律.如果能保证每个后面都有逗号的话.

select 编号,count(*) 项目数量
  from (select 编号,substr(从事项目,rownum,1) sa
          from 人员信息表
          connnect by rownum <length(从事项目))
where sa = ','
查出来有多少个“,”就有多少项目。
[/Quote]
是的,能保证每个值后面都有",",我试一下。谢谢
zhangchu_63 2009-08-03
  • 打赏
  • 举报
回复
使用分割符","
不过看你数据,分割符好象没规律.如果能保证每个后面都有逗号的话.

select 编号,count(*) 项目数量
from (select 编号,substr(从事项目,rownum,1) sa
from 人员信息表
connnect by rownum <length(从事项目))
where sa = ','
查出来有多少个“,”就有多少项目。
iBobbySun 2009-08-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 binhe521 的回复:]
如果像你这么有规律
那就:
select 编号,length(从事项目)/3 as 项目数量
from 种类表
[/Quote]

这是个例子,实际中肯定不会是这样的!
binhe521 2009-08-03
  • 打赏
  • 举报
回复
如果像你这么有规律
那就:
select 编号,length(从事项目)/3 as 项目数量
from 种类表

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧