表结构如下:
表1:question(问题表) 表2:user(解决人员表) 表3:state(问题状态表)
--- -------- -------- ------- --------- ------- ---------
ID USERID STATEID USERID USERNAME STATEID STATENAME
1 1 1 1 张三 1 未分配
2 1 2 2 李四 2 已分配
3 2 3 3 王五 3 已解决
4 3 1
表1通过外键同时与表2,表3关联
现在我想统计每个解决人员对于每种问题状态的问题个数是多少?也就是希望得到如下的结果:
-------- ---------- ---------
USERNAME STATENAME COUNT
张三 未分配 ??
张三 已分配 ??
张三 已解决 ??
李四 未分配 ??
李四 已分配 ??
李四 已解决 ??
.........
9条统计结果。希望高手指点,这样的统计SQL语句该如果写?不胜感激!~~~~~~~
表1:question(问题表) 表2:user(解决人员表) 表3:state(问题状态表)
--- -------- -------- ------- --------- ------- ---------
ID USERID STATEID USERID USERNAME STATEID STATENAME
1 1 1 1 张三 1 未分配
2 1 2 2 李四 2 已分配
3 2 3 3 王五 3 已解决
4 3 1
表1通过外键同时与表2,表3关联
现在我想统计每个解决人员对于每种问题状态的问题个数是多少?也就是希望得到如下的结果:
-------- ---------- ---------
USERNAME STATENAME COUNT
张三 未分配 ??
张三 已分配 ??
张三 已解决 ??
李四 未分配 ??
李四 已分配 ??
李四 已解决 ??
.........
9条统计结果。希望高手指点,这样的统计SQL语句该如果写?不胜感激!~~~~~~~
from a,b,c
where a.user_id=b.user_id
and a.stateid=c.stateid
group by b.username,c.STATENAME
inner join state on question.STATEID= state. STATEID group by user.USERNAME,state.STATENAME,
OPER@tl> select username,statename,count(id) over(partition by username,statename order by username,statename) rn
2 from question a,
3 (select userid,username,stateid,statename
4 from users,states) b
5 where a.userid(+)=b.userid
6 and a.stateid(+)=b.stateid;USERNAME STATENAME RN
-------------------- ------------------------ ----------
张三 已分配 1
张三 已解决 0
张三 未分配 1
李四 已分配 0
李四 已解决 1
李四 未分配 0
王五 已分配 0
王五 已解决 0
王五 未分配 1已选择9行。OPER@tl>
from question a,
(select userid,username,stateid,statename
from users,states) b
where a.userid(+)=b.userid
and a.stateid(+)=b.stateid
group by username,statename
order by username,statename;
2 from (select username, statename from users, state) a,
3 (select b.username, c.STATENAME, count(*) num
4 from question a, users b, state c
5 where a.userid = b.userid
6 and a.stateid = c.stateid
7 group by b.username, c.STATENAME) b
8 where a.username = b.username(+)
9 and a.statename = b.statename(+)
10 order by username, statename
11 ;
USERNAME STATENAME NVL(B.NUM,0)
---------- ---------- ------------
李四 未分配 0
李四 已分配 0
李四 已解决 1
王五 未分配 1
王五 已分配 0
王五 已解决 0
张三 未分配 1
张三 已分配 1
张三 已解决 0
9 rows selected
SQL> SELECT USERNAME, STATENAME, COUNT(Q.USERID||Q.STATEID) COUNTS
2 FROM QUESTION Q,
3 (SELECT *
4 FROM USER U,
5 STATE S
6 )US
7 WHERE Q.USERID(+) = US.USERID
8 AND Q.STATEID(+) = US.STATEID
9 GROUP BY USERNAME, STATENAME;USERNAME STATENAME COUNTS
-------- --------- ----------
李四 未分配 0
李四 已分配 0
李四 已解决 1
王五 未分配 1
王五 已分配 0
王五 已解决 0
张三 未分配 1
张三 已分配 1
张三 已解决 09 rows selected