SELECT ROW_NUMBER() OVER (PARTITION BY File_ID ORDER BY ERROR_IN_PHASE ASC) AS Rn,File_ID,ERROR_IN_PHASE ,COUNT(*) AS Cnt
INTO #Temp1
FROM Tbl2
GROUP BY File_ID,ERROR_IN_PHASE
SELECT t2.*,ROW_NUMBER() OVER (PARTITION BY File_ID,ERROR_IN_PHASE ORDER BY Error_Desc) AS Rn
INTO #temp2
FROM @Tbl2 t2
UNPIVOT (Err_Comment FOR Error_Desc IN ([ERROR_1],[ERROR_2],[ERROR_3],[ERROR_4]....[ERROR_9]))u
SELECT t1.File_ID,t1.Emp_Name,t1.Shift_Date,t1.Status AS REWORK,
STUFF((SELECT ',' + ERROR_IN_PHASE + '(' + CAST(Cnt AS Varchar(10)) + ')'
FROM #Temp1 WHERE File_ID = t1.File_ID
ORDER BY ERROR_IN_PHASE
FOR XML PATH('')),1,1,'') AS Phase_Summary,
tmp.FIRST_PHASE_REWORK,
STUFF((SELECT TOP 3 ',' + Err_Comment
FROM #Temp2
WHERE File_ID = t1.File_ID
AND ERROR_IN_PHASE = tmp.FIRST_PHASE_REWORK
ORDER BY Rn ASC
FOR XML PATH('')),1,1,'') AS Related_Error_Phase1,
tmp.SECOND_PHASE_REWORK,
STUFF((SELECT TOP 3 ',' + Err_Comment
FROM #Temp2
WHERE File_ID = t1.File_ID
AND ERROR_IN_PHASE = tmp.SECOND_PHASE_REWORK
ORDER BY Rn ASC
FOR XML PATH('')),1,1,'') AS Related_Error_Phase2,
tmp.THIRD_PHASE_REWORK,
STUFF((SELECT TOP 3 ',' + Err_Comment
FROM #Temp2
WHERE File_ID = t1.File_ID
AND ERROR_IN_PHASE = tmp.THIRD_PHASE_REWORK
ORDER BY Rn ASC
FOR XML PATH('')),1,1,'') AS RELATED_ERROR_PHASE3
FROM Tbl1 t1
INNER JOIN (SELECT File_ID,
MAX(CASE WHEN Rn=1 THEN ERROR_IN_PHASE END) AS FIRST_PHASE_REWORK,
MAX(CASE WHEN Rn=2 THEN ERROR_IN_PHASE END) AS SECOND_PHASE_REWORK,
MAX(CASE WHEN Rn=3 THEN ERROR_IN_PHASE END) AS THIRD_PHASE_REWORK
FROM #Temp1
GROUP BY File_ID
)tmp
ON tmp.File_ID = t1.File_ID
DROP TABLE #Temp1
DROP TABLE #Temp2
to understand the concepts see
http://pratchev.blogspot.com/2008/03/row-concatenation-with-for-xml-path.html
http://weblogs.sqlteam.com/jeffs/archive/2008/04/23/unpivot.aspx
------------------------------------------------------------------------------------------------------
SQL Server MVP
http://visakhm.blogspot.com/