select 表a.学生姓名,count(*)as一周值班总次数 from 表b inner join 表a on 表b.值班生编号=表a.学生编号 group by 表b.值班生编号
现在按周来统计每个值班生在一定长时间里周一到周五分别值过多少班 这句说的有点问题噢 设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 日期范围
设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 日期范围
除了主键外其他字段无关系。
正确的设计是:表 Duty:
字段:id,DutyDate StudentId、
原意是想说,比方半年内,或者一个月内,看学生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日期范围
table a:
date, 擦黑板, 拖地, 打水
五月一号 学生A 学生B 学生C
五月二号 学生A 学生C 学生B
五月三号 学生B 学生A 学生C
。现在想知道五月份学生A、B、C分别擦了几次黑板、拖了几次地、打了几次水