现有三个表
社区表 grouptbl
group_id group_name (字段说明1\社区ID 2\社区名称)
1         三江区
2         新城区
3         花园区
......用户表 usertbl
user_id user_name group_id  user_level vip_flag(字段说明1\用户ID 2\用户名称 3\社区ID 4\用户级别 5\新用户标志)
 1       张三       1         2级           是
 2       李四       1         1级           否
 3       王五       2         3级           否
 4       冯六       2         1级           是
.............维修表 worktbl
work_id user_id work_date    work_level  (字段说明1\表ID 2\用户ID 3\维修时间 4\故障级别)
  1       2      2007-06-13   严重
  2       2      2007-06-17   普通
  3       4      2007-06-21   次要
...........
现在需要写SQL分别完成显示这样的结果集
1\按社区显示当月有发生故障的用户数,新用户的故障次数,各个故障级别的故障次数
即显示结果为
社区名   发生故障的用户数   新用户故障次数  严重故障次数  次要故障次数  普通故障次数
三江区    3                   5               1               2            6
新城区    5                   12              3               8            20
花园区    0                   0                 0             0            0
......................注意:这里需要说明的是发生故障的用户数指的是统计当月有多少个用户发生了故障,而不是统计发生故障的总数,后面的三个指标倒是统计故障次数的
当这一社区本月没有用户有故障时,那么所有指标都为0.2\按社区显示当月有发生故障的用户数,各个用户级别的发生故障用户数
即显示结果为
社区名   发生故障的用户数   3级用户  2级用户  1级用户  
三江区    3                   1       2        0
新城区    5                   2       1        2        
花园区    0                  0        0        0
.....................请教,这样的SQL语句怎么写?如果不能写SQL,那么是否只能用存储过程来解决了?望赐教,万分感谢.

解决方案 »

  1.   

    select g.group_name, 
    count(distinct u.user_name) 发生故障的用户数,
    sum(decode(u.vip_flag,'是',1,0) 新用户故障次数, 
    sum(decode(w.work_level,'严重',1,0) 严重故障次数, 
    sum(decode(w.work_level,'次要',1,0) 次要故障次数, 
    sum(decode(w.work_level,'普通,1,0) 普通故障次数, 
    from grouptbl ,usertbl u,worktbl w
    where g.group_id=u.group_id and 
    group by g.group_name另一个类似。
      

  2.   

    楼上的,我没有分析楼主要求,只是看到你的SQL有漏洞:where g.group_id=u.group_id and  <---???
    group by g.group_name
      

  3.   

    做人第二题
    select 
    t3.group_name,
    count(1),
    sum(decode(t2.user_level,'2级',1,0)),
    sum(decode(t2.user_level,'1级',1,0)),
    sum(decode(t2.user_level,'3级',1,0))
    from worktbl t1,usertbl t2,grouptbl t3
    where t1.user_id=t2.user_id and t2.group_id=t3.group_id
    group by t3.group_name
      

  4.   

    work_level 已经确定只有三种么?