问题表:
ID---KEY---createtime---updatetime----所属作业ID 
1----k1----2008/8/7-----2008/8/7------zy1 
2----k2----2008/8/7-----2008/8/7------zy1 
3----k3----2008/8/7-----2008/8/7------zy2 
4----k4----2008/8/7-----2008/8/7------zy3 
作业表: 
ID---KEY---作业名称---布置者 
zy1--k5----XX作业----XX老师 
zy2--k6----SS作业----TT老师 
zy3--k7----JJ作业----QQ老师 
zy4--k8----OO作业----UU老师 
修改记录表
ID--------问题ID-------修改者---------修改时间
1001-------2----------TT老师 --------200-8-8
1002-------2----------TT老师 --------200-8-8
1003-------2----------TT老师 --------200-8-8
1004-------2----------QQ老师 --------200-8-8注:一个修改着可重复修改1个问题多次也可修改别的问题
修改详细表
ID---------修改记录ID----------修改的地方
10001--------1001---------------问题内容
10002--------1001--------------加了条批注
10003--------1001---------------删了条批注
10004--------1002---------------加了赞美语注:每次修改可同时修改一个问题的多个地方
问题表与作业表 由问题表的‘所属作业ID’和作业表的ID关联问题表与修改记录表 由问题表的ID与修改记录表的问题ID关联修改记录表与修改详细记录表  由修改记录表的ID关联
查的是...............指定修改者 在指定的作业  一共修改了多少问题,修改的地方各种种类分别是多少个
我现在的SQL
select a.修改者,date_format(a.修改日期),b.修改的类别
from 问题表 i,作业表 p,修改记录表 a,修改详细记录表 b
where i.所属作业ID=p.作业ID
and i.问题ID=a.问题ID
and a.ID=b.修改表IDand a.修改者=‘XX’
and p.作业名=‘asdasdasd’
我想查出来的效果是修改者-------2008-8-8---------一共修改了多少---------加了赞美语有占几个----加了条批注占几个---**占几个---YY占几个

解决方案 »

  1.   

    --试试下边这个,可以扩充sum来添加你想统计的种类.select a.修改者,
           date_format(a.修改日期,'%Y-%m-%d') as 修改日期,
           count(distinct i.ID) as 一共修改了多少,
           sum(case b.修改的地方 when '加了赞美语' then 1 else 0 end) as 加了赞美语有占几个,
           sum(case b.修改的地方 when '加了条批注' then 1 else 0 end) as 加了条批注占几个
    from 问题表 i,作业表 p,修改记录表 a,修改详细记录表 b
    where i.所属作业ID=p.作业ID
    and i.问题ID=a.问题ID
    and a.ID=b.修改表ID
    and a.修改者=‘XX’
    and p.作业名=‘asdasdasd’
    group by a.修改者,date_format(a.修改日期,'%Y-%m-%d')
      

  2.   

    我的SQLselect a.修改者,date_format(a.修改日期),b.修改的类别 
    from 问题表 i,作业表 p,修改记录表 a,修改详细记录表 b 
    where i.所属作业ID=p.作业ID 
    and i.问题ID=a.问题ID 
    and a.ID=b.修改表ID and a.修改者=‘XX’ 
    and p.作业名=‘asdasdasd’ 查出来的效果是修改者---------修改日期------------修改类别
    张三------------05-8-8------------修改注释
    张三------------05-8-8------------添加注释
    张三------------05-8-8------------删除一段文字
    张三------------05-8-8------------修改注释张三------------06-8-8------------修改注释张三------------09-8-8------------删除一段文字而我需要查出来的是,把上面的归类就成为修改者-----修改日期-------一共修该几次-------修改注释占几次-------添加注释占几次----删除文字占几次
    张三--------05-8-8----------4----------------2--------------------1---------------1
    张三--------06-8-8----------1----------------1--------------------0---------------0
    张三--------09-8-8----------1----------------0--------------------0---------------1
    最终效果就像这样的
      

  3.   

    --如果不是问题的个数,那么只要count(*)就可以了,如下:select a.修改者,
          date_format(a.修改日期,'%Y-%m-%d') as 修改日期,
          count(*) as 一共修改了多少,
          sum(case b.修改的地方 when '加了赞美语' then 1 else 0 end) as 加了赞美语有占几个,
          sum(case b.修改的地方 when '加了条批注' then 1 else 0 end) as 加了条批注占几个,
          sum(case b.修改的地方 when '删除文字' then 1 else 0 end) as 删除文字占几次
    from 问题表 i,作业表 p,修改记录表 a,修改详细记录表 b
    where i.所属作业ID=p.作业ID
    and i.问题ID=a.问题ID
    and a.ID=b.修改表ID
    and a.修改者=‘XX’
    and p.作业名=‘asdasdasd’
    group by a.修改者,date_format(a.修改日期,'%Y-%m-%d');