Thanks satheesh , please see the function code
ALTER FUNCTION [dbo].[Fun_File_Stage_Holding_Day_iTVF]
(@File_ID INT,
@Stage_ID INT,
@Quater_ID INT,
@Is_Only_Holding_Day BIT=0)
RETURNS @Temptable TABLE (TAT_Days INT)
AS
BEGIN
-- Declare the return variable here
DECLARE @Group_Id INT, @Target_Days INT,@int_Side_Track_Day INT,@int_Not_Working_Day INT
,@Stage_Ids NVARCHAR(MAX),@S_LogDate DATETIME,@E_LogDate DATETIME
, @File_Holding_Days INT
SELECT @File_Holding_Days=0,@Stage_Ids=''
SELECT @Group_Id=GROUP_ID, @Target_Days=HOLDING_DAY
FROM dbo.FILE_STAGE_HOLDING_DAY_SETTING WITH (NOLOCK) WHERE STAGE_ID=@Stage_ID
IF(@Target_Days>0)
BEGIN
IF(@Quater_ID > 0)
BEGIN
DECLARE @tbl_Quater_Date TABLE (FROM_DATE DATETIME,TO_DATE DATETIME,STAGE_ID INT)
INSERT INTO @tbl_Quater_Date( FROM_DATE ,TO_DATE,STAGE_ID)
SELECT FROM_DATE,TO_DATE,STAGE_ID
FROM dbo.Split(@Quater_ID,',') AS tbl_Quater_Id
INNER JOIN dbo.FILE_STAGE_LOG WITH (NOLOCK) ON tbl_Quater_Id.Data=QUATER_ID AND FILE_ID=@File_ID AND ISNULL(IS_BACK_STAGE,'False')='False'
SELECT @S_LogDate=FROM_DATE FROM @tbl_Quater_Date WHERE STAGE_ID=@Stage_ID
IF(EXISTS(SELECT FROM_DATE FROM @tbl_Quater_Date WHERE TO_DATE IS NULL AND STAGE_ID=@Stage_ID))
SELECT @E_LogDate=GETDATE()
ELSE
SELECT @E_LogDate=TO_DATE FROM @tbl_Quater_Date WHERE STAGE_ID=@Stage_ID
END
ELSE
BEGIN
IF(ISNULL(@Group_Id,0) >0)
SELECT @Stage_Ids = COALESCE(@Stage_Ids+ ', ','') + CONVERT(NVARCHAR(10),STAGE_ID) FROM dbo.FILE_STAGE_HOLDING_DAY_SETTING WHERE GROUP_ID=@Group_Id
ELSE
SET @Stage_Ids=@Stage_ID
DECLARE @tbl_Date TABLE(FROM_DATE DATETIME,TO_DATE DATETIME)
INSERT INTO @tbl_Date( FROM_DATE ,TO_DATE)
SELECT FROM_DATE,TO_DATE
FROM dbo.Split(@Stage_Ids,',') AS tbl_Stage_Id
INNER JOIN dbo.FILE_STAGE_LOG WITH (NOLOCK) ON tbl_Stage_Id.Data=STAGE_ID AND FILE_ID=@File_ID AND ISNULL(IS_BACK_STAGE,'False')='False'
SELECT @S_LogDate=MAX(FROM_DATE) FROM @tbl_Date
IF(EXISTS(SELECT FROM_DATE FROM @tbl_Date WHERE TO_DATE IS NULL))
SELECT @E_LogDate=GETDATE()
ELSE
SELECT @E_LogDate=MAX(TO_DATE) FROM @tbl_Date
END
SELECT @int_Side_Track_Day=ISNULL(SUM(DATEDIFF(DAY,CONVERT(DATE,CREATED_DATE) ,CONVERT(DATE,REVISED_DATE))),0)
FROM dbo.Split(@Stage_Ids,',') AS tbl_Stage_Id
INNER JOIN dbo.LOAN_SIDE_TRACK WITH (NOLOCK) ON tbl_Stage_Id.Data=dbo.LOAN_SIDE_TRACK.STAGE_ID AND dbo.LOAN_SIDE_TRACK.FILE_ID=@File_ID
SELECT @int_Not_Working_Day=ISNULL(COUNT(DATE_VALUE),0) FROM WORKING_DAY_MASTER WITH (NOLOCK) WHERE IS_WORKING=0 AND DATE_VALUE BETWEEN @S_LogDate AND @E_LogDate
SET @File_Holding_Days = DATEDIFF(DAY,@S_LogDate,@E_LogDate)-(@int_Side_Track_Day- (@int_Side_Track_Day/7)+ @int_Not_Working_Day)
-- Return the result of the function+
END
DECLARE @Str_Result NVARCHAR(50)
IF(@Is_Only_Holding_Day=0)
SET @Str_Result= CONVERT(VARCHAR(50),@Target_Days) + ',' + CONVERT(VARCHAR(50),@File_Holding_Days )
ELSE
SET @Str_Result=CONVERT(VARCHAR(50),@Target_Days -@File_Holding_Days)
INSERT INTO @Temptable( TAT_Days )
SELECT ISNULL(@Str_Result,0);
RETURN;
END