我有一个功能,用于计算患者无法使用的天数,以减少他们违反等待时间截止日期的天数。
功能如下:
CREATE FUNCTION [dbo].[GetDaysUnavailable]
(
@intRef int
)
RETURNS int
AS
BEGIN
DECLARE @ReturnValue int
DECLARE @dtUnavailFrom datetime
DECLARE @dtUnavailTo datetime
DECLARE @dtRefRcvd datetime
SELECT @dtUnavailFrom = UnavailableFrom FROM Referrals WHERE ReferralID = @intRef
SELECT @dtUnavailTo = UnavailableTo FROM Referrals WHERE ReferralID = @intRef
SELECT @dtRefRcvd = ReferralReceivedDate FROM Referrals WHERE ReferralID = @intRef
IF ISNULL(@dtUnavailFrom,'') = '' OR ISNULL(@dtUnavailTo,'') = ''
BEGIN
SELECT @ReturnValue = 0
END
ELSE
BEGIN
IF @dtRefRcvd > @dtUnavailFrom
BEGIN
SELECT @ReturnValue = DATEDIFF(day,@dtRefRcvd, @dtUnavailTo)
END
ELSE
BEGIN
SELECT @ReturnValue = DATEDIFF(day,@dtUnavailFrom, @dtUnavailTo)
END
END
RETURN @ReturnValue
END
正如您所看到的那样,它解决了此人无法使用的日期与他们不在的日期或他们的推荐日期之间的差异。这很好用我原来的结构,其中2个日期字段在主表中。这个问题是,只有一段时间不可用。
我现在已经更改了表结构,因此不可用时段位于它们自己的表中,该表与主表具有1对多的关系。
但现在我无法弄清楚如何让我的功能应对新的结构。我基本上需要能够拉出与父记录相关的不可用性表中的每一行,然后循环遍历每一行,总结不可用性并在结束时返回总数。
有什么想法吗?
答案 0 :(得分:0)
您可以从此子查询返回值
Select Sum(Datediff(day,UnavailableFrom,UnavailableTo)) as Summary from UnavailabilityTbl where ReferralID = @intRef Group by ReferralID