更改SQL Server函数以使用多个记录

时间:2016-06-29 09:32:56

标签: sql function sql-server-2014

我有一个功能,用于计算患者无法使用的天数,以减少他们违反等待时间截止日期的天数。

功能如下:

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对多的关系。

但现在我无法弄清楚如何让我的功能应对新的结构。我基本上需要能够拉出与父记录相关的不可用性表中的每一行,然后循环遍历每一行,总结不可用性并在结束时返回总数。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以从此子查询返回值

Select Sum(Datediff(day,UnavailableFrom,UnavailableTo)) as Summary from UnavailabilityTbl where ReferralID = @intRef Group by ReferralID