SQL for Matrix Reports
I have a list of students in the student table. I have a list of exams in the exam table. There is a score table with the following columns studentID, examID and score. I want to create a matrix report with students in the rows and exams in the columns
The report will look like this:
| Student Name | Exam 1 | Exam 2 |
| Vijay | 73 | 83 |
| Rahul | 79 | 64 |
CREATE PROCEDURE [dbo].[GetScoreMatrix] AS CREATE TABLE #Temp ( StudentName VARCHAR(50) ) DECLARE @sTable VARCHAR(1000) DECLARE @sCol VARCHAR(1000) SET @sTable = 'ALTER TABLE #Temp ADD ' DECLARE cExam CURSOR FOR SELECT ExamName FROM Exam OPEN cExam DECLARE @sExamName VARCHAR(50) FETCH NEXT FROM cExam INTO @sExamName WHILE @@FETCH_STATUS = 0 BEGIN SET @sCol = @sTable + '[' + @sExamName + '] INT NULL' EXEC (@sCol) FETCH NEXT FROM cExam INTO @sExamName END CLOSE cExam DEALLOCATE cExam INSERT INTO #Temp (StudentName) SELECT StudentName FROM Student DECLARE cScore CURSOR FOR SELECT s.StudentName, e.ExamName, x.Score FROM STUDENT s INNER JOIN Score x ON s.StudentID = x.StudentID INNER JOIN Exam e ON x.ExamID = e.ExamID OPEN cScore DECLARE @sStudName VARCHAR(50) DECLARE @iScore INT DECLARE @sUpdate VARCHAR(1000) FETCH NEXT FROM cScore INTO @sStudName, @sExamName, @iScore WHILE @@FETCH_STATUS <> -1 BEGIN SET @sUpdate = 'UPDATE #Temp ' SET @sUpdate = @sUpdate + 'SET [' + @sExamName + '] = ' + CAST(@iScore AS VARCHAR(3)) SET @sUpdate = @sUpdate + ' WHERE StudentName = ''' + @sStudName + '''' EXEC (@sUpdate) FETCH NEXT FROM cScore INTO @sStudName, @sExamName, @iScore END CLOSE cScore DEALLOCATE cScore SELECT * FROM #Temp DROP TABLE #Temp GO
Posted by Vijay on 17-Sep-2009 03:40 PM
Category : General
Category : General


