2016-06-29 44 views
0

我有一個函數用於計算患者不可用的天數,以減少他們違反等待時間最後期限的天數。更改SQL Server函數以使用多個記錄

的功能如下:

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個日期字段在主表中。與此有關的問題是,可能只有一段時間不可用。

我現在已經更改了表結構,以便不可用時間段位於它們自己的表中,該表與主表具有一對多的關係。

但現在我無法弄清楚如何讓我的功能來應對新的結構。我基本上需要能夠拉動與父記錄相關的不可用表中的每一行,並且它們遍歷每行,總結不可用性並在最後返回總數。

任何想法?

回答

0

您可以從該子查詢返回值

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