Try to use dynamic pivot, this may help you,
DROP TABLE #t1
CREATE TABLE #t1
(
EmpID INT,
[Height] NVARCHAR(100),
[Weight] NVARCHAR(100),
[Attitude] NVARCHAR(100),
[Build] NVARCHAR(100),
[DateID] INT
)
INSERT INTO #t1
VALUES(1, '5.2', '65', 'Cool', 'Good', 1),(1, '5.2', '55', 'Cool', 'Average', 2),(1, '5.2', '55', 'Cool', 'Average', 3)
DECLARE @SQL NVARCHAR(MAX),@MinID INT,@MaxID INT,@DateID NVARCHAR(100)
SELECT @MinID = 2,@MaxID = MAX([DateID])
FROM #t1
SELECT @SQL = '(select * from #t1 E where [DateID] = 1 )E UNPIVOT ([1] FOR OrderName IN (Height, Weight, Attitude, Build))E1'
WHILE(@MinID<=@MaxID)
BEGIN
SELECT @SQL = @SQL +' INNER JOIN '
+'(select * from #t1 E where [DateID] = '+CAST(@MinID AS NVARCHAR(100))+' )E
UNPIVOT (['+CAST(@MinID AS NVARCHAR(100))+'] FOR OrderName IN (Height, Weight, Attitude, Build))E'+CAST(@MinID AS NVARCHAR(100))+
+' ON E1.EmpID = E'+CAST(@MinID AS NVARCHAR(100))+'.EmpID AND E1.OrderName = E'+CAST(@MinID AS NVARCHAR(100))+'.OrderName'
SELECT @MinID = @MinID + 1
END
SELECT @SQL = 'SELECT * FROM '+@SQL
EXEC(@SQL)
Regards,
Mitesh OSwal
+918698619998