Please help me in adding dynamic pivot dates based on @fromdate and @enddate [code="sql"]Declare @temp TABLE(shift_date1 datetime,empid1 int,shift_type VARCHAR(30))declare @fromdate datetime = '2014-02-01'declare @enddate datetime = '2014-02-20'declare @emp INT=469;WITH alldates as (SELECT TOP (DATEDIFF(dd,@fromdate, @endDate)+1) shift_date = DATEADD(dd,ROW_NUMBER() OVER (ORDER BY (SELECT NULL))-1,@fromdate) FROM (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0))n1(n) CROSS JOIN (VALUES(0),(0),(0),(0),(0),(0),(0),(0),(0),(0))n2(n))--SELECT * FROM alldates,valid_emp as (SELECT emp.Emp_Code, emp.EndDate,emp1.empidFROM dbo.ShiftScheduler emp INNER JOIN emploee emp1 ON emp.emp_code = emp1.empcodeWHERE(emp1.empid = @emp))--SELECT * FROM valid_empinsert into @temp(shift_date1,empid1,shift_type)SELECT ad.shift_date, COALESCE(ve.empid, @emp) empid, CASE WHEN ve.EndDate IS NULL THEN 'DAYSHIFT' ELSE 'NIGHTSHIFT' END shift_typeFROM alldates AS ad LEFT OUTER JOIN valid_emp AS ve ON ad.shift_date = ve.EndDate; --SELECT * INTO #temp1 FROM @temp --SELECT * FROM #temp1 --DROP TABLE #temp1 Update q set shift_type=case when b.ShiftType=4 then 'NIGHTSHIFT' else 'DAYSHIFT' endfrom emploee a inner join @temp q on a.empid =q.empid1Inner join dbo.ShiftScheduler b on a.empcode =b.Emp_Code and q.shift_date1 between b.Fromdate and b.EndDate--DROP TABLE #temp1SELECT * INTO #temp1 FROM @temp SELECT * FROM #temp1select * from ( SELECT shift_type ,shift_date1, empid1 FROM #temp1 ) as sourceTablePivot (MAX(shift_type) for shift_date1 in ([2015-10-01],[2015-10-02],[2015-10-03],[2015-10-04],[2015-10-05],[2015-10-06],[2015-10-07],[2015-10-08],[2015-10-09],[2015-10-10],[2015-10-11],[2015-10-12],[2015-10-13],[2015-10-14],[2015-10-15],[2015-10-16],[2015-10-17],[2015-10-18],[2015-10-19],[2015-10-20],[2015-10-21],[2015-10-22],[2015-10-23],[2015-10-24],[2015-10-25],[2015-10-26],[2015-10-27],[2015-10-28],[2015-10-29],[2015-10-30],[2015-10-31]) )[/code]
↧