表结构如下:
表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.   

    sum(decode)搞定阿,再关联一下
      

  2.   

    select b.username,c.STATENAME,count(*) num
     from a,b,c
    where a.user_id=b.user_id
    and a.stateid=c.stateid
    group by b.username,c.STATENAME
      

  3.   

    select user.USERNAME,state.STATENAME,count(*) from question inner join user on question.USERID = user. USERID
    inner join state on question.STATEID= state. STATEID group by user.USERNAME,state.STATENAME,
      

  4.   

    看了下,这个要用外联接,不然都没有LZ要的结果。
    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> 
      

  5.   

    select username,statename,count(id) rn
    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;
      

  6.   

    2楼的再修改一下SQL> select a.username, a.statename, nvl(b.num, 0)
      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
     
      

  7.   

    SELECT  USERID,STATEID,COUNT(*)HJ FROM question GROUP BY   USERID, STATEID然后可以针对USERID和stateid转换成中文名,当然也可以直接带进上面的语句中转换!
      

  8.   

    -- TRY IT ..
    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