Overview : I want to show the weekly result by input parameters startdate and enddate. I am getting this result quite well. But the problem here is, When i want start date from 28/08/2015 from end date 04/09/2015 am getting 28, 29, 30, 31, 01, 02, 03, 04 from same month(august). Expected result should be 28, 29, 30, 31 from august and 01, 02, 03, 04 from september.
Help me to overcome this problem. Below is my code
ALTER PROCEDURE [dbo].[usp_Get_TimesheetDetails]
@UserID int, @startdate datetime, @enddate datetime
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
declare @intStartDate int
declare @intEndDate int, @diff int
declare @strMonth varchar(50)
Select @intStartDate = DATEPART(day, @startDate)
Select @intEndDate = DATEPART(day, @endDate)
select @strMonth = DATENAME(MONTH, GETDATE())
Declare @temptable table (num date )
Declare @columns varchar(max)
DECLARE @sqlText nvarchar(1000);
DECLARE @startnum INT = @intStartDate-1
DECLARE @endnum INT = @intEndDate
select @diff = DATEDIFF(MONTH, @startdate, @enddate)
;WITH gen AS (
SELECT @startdate AS num
UNION ALL
SELECT DATEADD(DAY,1,num) FROM gen
WHERE DATEADD(DAY,1,num) <= @enddate
)
insert into @temptable SELECT num FROM gen
option (maxrecursion 10000)
set @columns=
(SELECT distinct
STUFF((SELECT ',' + CAST( DATEPART(DAY, num) as varchar(100)) [text()]
FROM @temptable
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM @temptable t)
if(@startnum < 10)
BEGIN
SET @sqlText = N'SELECT ' + STUFF(REPLACE(@columns,',','],['),1,3,'') + ']' + ' FROM dbo.timesheet where month ='''+ @strMonth+''' and [Task ID] in(select TaskID from ManageTasks where TeamMemberUserID ='+ Cast(@UserID AS VARCHAR(max)) +')'
print @sqlText
END
else if(@startnum >= 10)
BEGIN
SET @sqlText = N'SELECT ' + STUFF(REPLACE(@columns,',','],['),1,4,'') + ']' + ' FROM dbo.timesheet where month ='''+ @strMonth+''' and [Task ID] in(select TaskID from ManageTasks where TeamMemberUserID ='+ Cast(@UserID AS VARCHAR(max)) +')'
END
print @sqlText
Exec (@sqlText)
end
end
Edited : I tried with if else condition like, if(monthdifference is equal to 0) else(monthdifference is greater than 0). But not getting expected result.