2016-06-29 3 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つの日付フィールドがメインテーブルにあった私の元の構造を使用しても問題ありませんでした。この問題は、利用不可能期間が1つしかないということでした。

これで、使用不可期間がメインテーブルと1対多の関係にある独自のテーブルになるように、テーブル構造を変更しました。

しかし、今私は新しい構造に対処するために私の機能をどうやって得るのか分かりません。私は基本的に、親レコードに関連する利用不可能なテーブルの各行を引き出し、各行をループして、利用不可能を合計し、最後に合計を戻す必要があります。

アイデア?

答えて

0

あなたはこのサブクエリから値を返すことができ

Select Sum(Datediff(day,UnavailableFrom,UnavailableTo)) as Summary from UnavailabilityTbl where ReferralID = @intRef Group by ReferralID 
関連する問題