三张基本表:TCls,Tstd,tCount===>
TCls: classID className
001 99计专
002 99计网
003 99计应
....................
TStd: classID stdID stdname
001 030101 小李
001 030102 小王
001 030103 小张
002 030201 小刚
003 030203 小江
..................
TCount: stdID nWeek nDay nCount
030101 1 1 30
030101 1 1 70
030101 1 2 78
030101 1 3 50
030101 1 4 90
030101 1 6 10
030102 1 2 20
..................
(nweek为周次,第一周,第二周。。。)
(nDay 为星期,星期一,~星期七)
======>目标表tResult
stdID nWeek nDay nState
030101 1 1 1
030101 1 2 1
030101 1 3 0
030101 1 4 1
030101 1 5 0
030101 1 6 1
030101 1 7 0
030102 1 1 1
030102 1 2 1
输入条件:【班级ID,周次】 例如:【001,1】,即001班级,第一周。
统计描述:根据输入的班级ID和周次,统计出该班级每个学生的一周7天的 nState
计算描述: 如果某个学生某一天在TCount表中只有一条或者无记录,
则这一天在目标表种的nState计为 0 ;
如果某个学生某一天在TCount表中有两条或者两条以上的记录,
并且在这一天的所有记录中【nCount最大值-nCount的最小值 >=15】,
则这一天在目标表种的nState计为 1 ;否则为0;
备注: 在以上的情况中,nCount值必须在【30,75】的闭区间内,否则为无效记录。
是老師的作業吧:)
1.-----------------------
建立一個數據表 StdTable 存放每個班每個學生每周應有的記錄
2.----------------------
select t2.stdID,t2.nWeek,t2.nDay,
State = case when max(t2.nCount) - min(t2.nCount) >= 15
then 1
else 0
end
into #temp1
from tstd t1
tcount t2
where t1.stdid = t2.stdid
and t2.nCount >= 30
and t2.nCount <= 75
and t1.classid = @classid
and t1.nweek = @weekid
group by t2.stdID,t2.nWeek,t2.nDay
having count(*) > 2
3.------------------------
#temp1 和 StdTable連接得到
having count(*) > 1