日期:2014-05-18 浏览次数:20431 次
CREATE PROCEDURE P_Search_ShitfList @S_BeginTime datetime ,--开始时间 是由查询的医生提供 @S_EndTime datetime ,--结束时间 @DeptID NVarChar --部门编号 AS declare @ShiftID int declare Shift_Cur cursor for select id from shift where deptID= @DeptID ---cancel create table #T1 ( weekName Nvarchar(50), sumCount Nvarchar(50), deptID Nvarchar(50), timeSerial datetime, actualCount Nvarchar(50), beginTime Nvarchar(50), endTime Nvarchar(50) ) open Shift_Cur fetch next from Shift_Cur into @ShiftID while @@fetch_status=0 begin --exec P_Search_Shitf '2012-02-01','2012-02-28','3','8' --print ltrim(str(@ShiftID)) insert into #T1 exec P_Search_Shitf @S_BeginTime,@S_EndTime,@DeptID,@ShiftID fetch next from Shift_Cur into @ShiftID end select TableSerial.timeSerial,#T1.* from ( --作用:获取两个时间之内的所有日期 --表别名:TableSerial --字段名:timeSerial select dateadd(dd,number,@S_BeginTime) as timeSerial from master..spt_values where type='p' and dateadd(dd,number,@S_BeginTime)<=@S_EndTime ) TableSerial left join #T1 on TableSerial.timeSerial = #T1.timeSerial --select * from #T1 order by timeSerial close Shift_Cur deallocate Shift_Cur GO
CREATE PROCEDURE P_Search_Shitf @S_BeginTime datetime ,--开始时间 是由查询的医生提供 @S_EndTime datetime ,--结束时间 @DeptID NVarChar(10) ,--部门编号 @ShiftID NVarChar(10) AS --作用:查询出一段时间,每日预约人数上限,实际预约人数 select ShiftSet.weekName,sumCount,ShiftSet.deptID,ShiftSet.timeSerial,actualCount,BeginTime,EndTime from ( select TableSerial.weekName,Isnull( tempB.sumCount,0) sumCount,tempB.deptID deptID,TableSerial.timeSerial,BeginTime,EndTime from ( --作用:获取两个时间之内的所有日期 --表别名:TableSerial --字段名:timeSerial,weekName select dateadd(dd,number,@S_BeginTime) as timeSerial,datename(weekday,dateadd(dd,number,@S_BeginTime) ) weekName from master..spt_values where type='p' and dateadd(dd,number,@S_BeginTime)<=@S_EndTime ) TableSerial join --作用:统计某科室周一 到 周日 ,每日设置预约人数上限 --shift 预约设置主表;ID:主键,deptID科室ID --(这2个字段这里暂时没用:BeginTime:起效时间--EndTime终止时间) --shiftDetail 预约设置明细 shiftID:主表对应ID;menCount:每个时段预约人数上限 ;weekID(1..7) --(这里暂时没用:PeriodID 分时段ID) --weekList 星期列表;weekID(1..7) weekName(星期一..星期日) --表别名:TempA,TempB --参数:@ShiftID ( select weekName,sumCount,deptID,BeginTime,EndTime from weekList, (select sum(menCount) sumCount,weekID,s.deptID ,BeginTime,EndTime from shift s,shiftDetail sd where s.id=@ShiftID and sd.shiftID = s.id --and s.deptID = @DeptID group by weekID,s.deptID,BeginTime,EndTime) TempA where weekList.weekID = TempA.weekID ) TempB on TempB.weekName = TableSerial.weekName and timeSerial>=BeginTime and timeSerial<=EndTime --必须有记录的有效期 ) ShiftSet left join ( --作用:统计某日、某门诊的已经预约人数。 --AppointList 是预约病人流水表。 deptID:预约门诊,appointTime:预约时间。 --参数:@DeptID select count(*) actualCount,deptID, appointTime from AppointList where deptID = @DeptID --这里应该加个时间范围!!!!@ group by appointTime,deptID )App on App.appointTime=ShiftSet.timeSerial --App.deptID=ShiftSet.deptID and order by timeSerial