--YOU COULD USED DYNAMIC PIVOT IF THE COLUMNS ARE DYNAMIC . HERE IS A SAMPLE
CREATE TABLE #T
(
NAME VARCHAR(20),
STYPE VARCHAR(10),
SDATE DATETIME
)
INSERT INTO #T VALUES('ANIMESH' , 'PRESENT' , '2015-05-01')
INSERT INTO #T VALUES('ANIMESH' , 'PRESENT' , '2015-05-02')
INSERT INTO #T VALUES('ANIMESH' , 'ABSENT' , '2015-05-03')
INSERT INTO #T VALUES('ANIMESH' , 'PRESENT' , '2015-05-04')
--VARIABLE FOR GET THE DATES IN SEQUENTIAL ORDER WITHIN A SINLE COLUMN
DECLARE @COLS AS VARCHAR(MAX)
--VARIABLE FOR DYNAMIC QUERY
DECLARE @QUERY AS NVARCHAR(MAX)
SELECT @COLS=ISNULL(@COLS+',','')+ '['+ CAST(CONVERT(DATE , T.SDATE) AS VARCHAR) + ']' FROM #T T
SET @COLS= REVERSE(SUBSTRING(REVERSE(@COLS),1,LEN(@COLS)))
SET @QUERY = 'SELECT NAME, ' + @COLS +' FROM
(
SELECT * FROM #T
) X
PIVOT
(
MIN([STYPE])
FOR [SDATE] IN (' + @COLS + ')
) P '
EXEC (@QUERY)
thanks
Animesh