首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

很难的SQL语句有关问题

2012-01-09 
很难的SQL语句问题现有三个表社区表grouptblgroup_idgroup_name(字段说明1\社区ID2\社区名称)1三江区2新城

很难的SQL语句问题
现有三个表
社区表   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,那么是否只能用存储过程来解决了?望赐教,万分感谢.

[解决办法]
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

另一个类似。


[解决办法]
楼上的,我没有分析楼主要求,只是看到你的SQL有漏洞:

where g.group_id=u.group_id and <---???
group by g.group_name
[解决办法]
做人第二题
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
[解决办法]
work_level 已经确定只有三种么?
[解决办法]
mark

热点排行