日期:2014-05-18  浏览次数:20380 次

这几天在大家帮助下,终于写好了。
对于大家可能简单,我写3天。 问了好几个问题,非常感谢大家帮助

时间序列生成
http://topic.csdn.net/u/20120226/12/35559e18-9424-4c9a-86f7-584df2739111.html

在存储过程里边,这么把查询出来的表,一条条遍历,取出想要的数据
http://topic.csdn.net/u/20120228/13/3d87112e-9f66-442c-8cb9-ea5972946fc5.html


怎么样把存储过程返回的表 并 起来
[url=]http://topic.csdn.net/u/20120228/08/b162ac93-4496-4658-96fe-4f22767d55c7.html[/url]

为什么用变量后,就查不出结果
http://topic.csdn.net/u/20120228/19/61ddf493-e3ea-4912-be5e-40901f35e3d0.html




SQL code

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




SQL code

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















------解决方案--------------------<