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

怎么样填补空白的记录
SQL code

(
--作用:获取两个时间之内的所有日期
select  
dateadd(dd,number,'2012-02-01') as timeSerial,datename(weekday,dateadd(dd,number,'2012-02-01'))weekName
from
  master..spt_values
where
  type='p'
and  
  dateadd(dd,number,'2012-02-01')<='2012-02-29'
)  TableSerial 






SQL code

(
--作用:统计某科室周一 到 周日 ,每日设置预约人数上限
--shift 预约设置主表;ID:主键,deptID科室ID
--(这2个字段这里暂时没用:BeginTime:起效时间--EndTime终止时间)
--shiftDetail 预约设置明细  shiftID:主表对应ID;menCount:每个时段预约人数上限 ;weekID(1..7)
--(这里暂时没用:PeriodID 分时段ID)
--weekList 星期列表;weekID(1..7) weekName(星期一..星期日)
select weekName,sumCount,deptID from weekList,

(select sum(menCount) sumCount,weekID,s.deptID 
from shift s,shiftDetail sd  
where sd.shiftID = s.id and s.deptID = 3  
group by weekID,s.deptID) TempA
where weekList.weekID = TempA.weekID 
) TempB





对上边2个表进行外连接;  
SQL code


select TableSerial.weekName,Isnull( tempB.sumCount,0) sumCount,Isnull( tempB.deptID,3)deptID,TableSerial.timeSerial from 

(
--作用:获取两个时间之内的所有日期
select  
  dateadd(dd,number,'2012-02-01') as timeSerial,datename(weekday,dateadd(dd,number,'2012-02-01') )  weekName
from
  master..spt_values
where
  type='p'
and  
  dateadd(dd,number,'2012-02-01')<='2012-02-29'
)  TableSerial 

left join

(
--作用:统计某科室周一 到 周日 ,每日设置预约人数上限
--shift 预约设置主表;ID:主键,deptID科室ID
--(这2个字段这里暂时没用:BeginTime:起效时间--EndTime终止时间)
--shiftDetail 预约设置明细  shiftID:主表对应ID;menCount:每个时段预约人数上限 ;weekID(1..7)
--(这里暂时没用:PeriodID 分时段ID)
--weekList 星期列表;weekID(1..7) weekName(星期一..星期日)
select weekName,sumCount,deptID from weekList,

(select sum(menCount) sumCount,weekID,s.deptID 
from shift s,shiftDetail sd  
where sd.shiftID = s.id and s.deptID = 3  
group by weekID,s.deptID) TempA
where weekList.weekID = TempA.weekID 
) TempB

on TempB.weekName = TableSerial.weekName 





 现在存在的情况是,对应TableSerial时间序列表,
TempB BeginTime:起效时间--EndTime终止时间,
可能是一个记录,也可能没有记录,也可能有好几个记录,而且情况不定。
如果出现空白记录,我需要填充,怎么样实现呢? 怎么样实现对TableSerial的左连接
比如:
TableSerial:'2012-02-01'---'2012-02-29'

TempB :
'2012-01-26'---'2012-02-5'
'2012-02-08'---'2012-02-10'
'2012-02-20'---'2012-03-10'

有点小急,谢谢


























------解决方案--------------------
空白也就是为null的情况么??
如果是这样可以用isnull(字段,为空后怎么处理)

例如:isnull(col1,0)--如果col1为空,则用0替代col1对应的值
------解决方案--------------------
你干脆拿第二段代码生成的结果集与master..spt_values进行联接查询。