谢谢回复,我改了一下,也不知道说清楚了没有?
表1:
si_ID varchar(18) primary key, /*住院编号*/
InDate datetime /*入院时间*/
OutDate datetime /*出院时间*表2:--病人所用药品
si_id varchar(18) /*住院编号
gd_ID varchar(20) /*药品编号
bDate datetime /*开始日期*/--开始用该药品的时间
eDate datetime /*截止日期*/--停止用该药品的时间表3:--病人所检查项目
si_id varchar(18) /*住院编号
ci_ID varchar(10) /*检查项目
dDate datetime /*检查日期*/是要 根据表1中的‘入院时间’和‘出院时间’为范围,来查询每日所用的表2中的药品,以及表3 中的检查项目,打印出病人的 每个住院日的明细。。即是说,要打印出该病人每天所用的药品和检查的项目,按照一天一天的来划分
表1:
si_ID varchar(18) primary key, /*住院编号*/
InDate datetime /*入院时间*/
OutDate datetime /*出院时间*表2:--病人所用药品
si_id varchar(18) /*住院编号
gd_ID varchar(20) /*药品编号
bDate datetime /*开始日期*/--开始用该药品的时间
eDate datetime /*截止日期*/--停止用该药品的时间表3:--病人所检查项目
si_id varchar(18) /*住院编号
ci_ID varchar(10) /*检查项目
dDate datetime /*检查日期*/是要 根据表1中的‘入院时间’和‘出院时间’为范围,来查询每日所用的表2中的药品,以及表3 中的检查项目,打印出病人的 每个住院日的明细。。即是说,要打印出该病人每天所用的药品和检查的项目,按照一天一天的来划分
没有经过严格测试,仅供参考/*======================================
调用示例
EXEC getDetail '123456'
=======================================*/
CREATE PROCEDURE getDetail
@si_id varchar(18) -- 住院编号
ASdeclare @InDate datetime ,@OutDate datetime
select @Indate=Indate,@OutDate=OutDate FROM 表1 WHERE si_id=@si_id
declare @t table(si_ID varchar(18),Aday datetime)while(@InDate<=@OutDate)
BEGIN
insert @t select @si_id,@InDate
set @InDate=DATEADD(dd,1,@InDate)
ENDSELECT O.si_ID 住院编号,O.Aday 日期,P.gd_id 药品编号,Q.ci_ID 检查项目
FROM @t O LEFT JOIN 表2 P ON O.Aday between P.bDate AND P.eDate
LEFT JOIN 表3 Q ON O.Aday=Q.dDate
------------------ --------------------------- ------------------ ------
123 2004-07-29 NULL NULL
123 2004-07-30 555 001
123 2004-07-31 555 002
123 2004-08-01 555 NULL
123 2004-08-02 NULL NULL
123 2004-08-03 NULL