表 a: 
字段:日期 周一值班生、周二值班生、周三值班生、周四值班生、周五值班生
其中表a字段值是每个值班生编号
表 b的学生编号;现在按周来统计每个值班生在一定长时间里周一到周五分别值过多少班

解决方案 »

  1.   

    select 表a.学生姓名,count(*)as一周值班总次数 from 表b inner join 表a on 表b.值班生编号=表a.学生编号 group by 表b.值班生编号
      

  2.   

    现在按周来统计每个值班生在一定长时间里周一到周五分别值过多少班 这句说的有点问题噢
    设a表
    date ,mon,tus,wed,thu,fri
    B表,
    iD,nameselect b.id,b.name,
           sum(decode(mon,b.id,1,0)) mon,
           sum(decode(tus,b.id,1,0)) tus,
           sum(decode(wed,b.id,1,0)) wed,
           sum(decode(thu,b.id,1,0)) thu,
           sum(decode(fri,b.id,1,0)) fri
    where (b.id=a.mon
          or b.id=a.tus
          or  b.id=a.wed
          or b.id=a.thu
          or b.id=a.fri)
          and a.date between  日期范围
      

  3.   

    数据库设计不满足第3泛式:
    除了主键外其他字段无关系。
    正确的设计是:表 Duty:  
    字段:id,DutyDate StudentId、 
      

  4.   

    对不起,谢谢大家的回复
    原意是想说,比方半年内,或者一个月内,看学生A、B、C分别值了几个周一的班,几个周的班-------------------------------------------
    现在按周来统计每个值班生在一定长时间里周一到周五分别值过多少班 这句说的有点问题噢 
    设a表 
    date ,mon,tus,wed,thu,fri 
    B表, 
    iD,name 
    SQL codeselectb.id,b.name,sum(decode(mon,b.id,1,0)) mon,sum(decode(tus,b.id,1,0)) tus,sum(decode(wed,b.id,1,0)) wed,sum(decode(thu,b.id,1,0)) thu,sum(decode(fri,b.id,1,0)) friwhere(b.id=a.monorb.id=a.tusorb.id=a.wedorb.id=a.thuorb.id=a.fri)anda.datebetween日期范围 
      

  5.   

    数据如下:
    table a:
           date,     擦黑板, 拖地, 打水
            五月一号    学生A   学生B  学生C
           五月二号    学生A   学生C  学生B
           五月三号    学生B   学生A  学生C
          。现在想知道五月份学生A、B、C分别擦了几次黑板、拖了几次地、打了几次水