SQL Server 2005 と asp.net 2008 を c# で使用しています...2 つのテーブル Result と Stud_Info があります.......
1] Stud_Info
CREATE TABLE Stud_Info
(Enroll_Number varchar(20) NOT NULL,
Salutation varchar(10) NULL,
First_Name varchar(20) NULL,
Middle_Name varchar(20) NULL,
Last_Name varchar(20) NULL,
Course_Id varchar(20) NULL,
Batch varchar(20) NULL)
INSERT into Stud_Info values(11161,'Mr.','Mack','B','Botha','MECH','Batch1');
INSERT into Stud_Info values(11162,'Mr.','John','A','Los','CIVIL','Batch2');
INSERT into Stud_Info values(11163,'Ms.','Merry','F','Dsuza','ELCT','Batch1');
INSERT into Stud_Info values(11164,'Mr.','Pow','B','Janero','MECH','Batch2');
INSERT into Stud_Info values(11165,'Mr.','Martin','J','Smith','MECH','Batch1');
SELECT * from Stud_Info
2nd Tableはこんな感じ。
2] Exam_Result
CREATE TABLE Exam_Result
(Result_Id numeric(18, 0) IDENTITY(1,1) NOT NULL,
Enroll_Number varchar(50) NULL,
Student_Name varchar(100) NULL,
Course_Id varchar(50) NULL,
Semester varchar(50) NULL,
Subject_Id varchar(50) NULL,
Subject_Name varchar(50) NULL,
MarksObtained numeric(18, 0) NULL,
Exam_Type varchar(50) NULL)
INSERT into Exam_Result values(11161,'Mack B Botha','MECH',1,'MT','Maths',25,'Internal1');
INSERT into Exam_Result values(11161,'Mack B Botha','MECH',1,'EN','English',22,'Internal1');
INSERT into Exam_Result values(11161,'Mack B Botha','MECH',1,'SC','Science',20,'Internal1');
INSERT into Exam_Result values(11166,'Barden V John','CIVIL',1,'SS','Social',21,'Internal2');
INSERT into Exam_Result values(11161,'Mack B Botha','MECH',2,'SM','Simple Maths',24,'Internal2');
INSERT into Exam_Result values(11161,'Mack B Botha','MECH',2,'SM','Simple Maths',69,'Final');
SELECT * from Exam_Result
&
Exam_Result は次のようになります....
Result_Id Enroll_No Student_Name Course_ID Semester Subject_Id Subject_Name Marks Type
1 11161 Mack B Botha MECH 1 MT Maths 25 Internal1
2 11161 Mack B Botha MECH 1 EN English 22 Internal1
3 11161 Mack B Botha MECH 1 SC Science 20 Internal1
4 11166 Barden V John CIVIL 1 SS Social 21 Internal2
5 11161 Mack B Botha MECH 2 SM Simple Maths 24 Internal2
6 11161 Mack B Botha MECH 2 SM Simple Maths 69 Final
サブジェクトの行から列への動的変換にこのPIVOTクエリを使用しています...そして正常に動作します。
declare @subjname varchar(100)
declare @subjects varchar(7000)
declare @subjectsselection varchar(7000)
set @subjects = ''
set @subjectsselection = ''
DECLARE subject_cursor CURSOR
FOR SELECT distinct Subject_Id FROM Result
OPEN subject_cursor
FETCH NEXT FROM subject_cursor
INTO @subjname
WHILE @@FETCH_STATUS = 0
BEGIN
set @subjects = @subjects + '[' + @subjname + ']'
set @subjectsselection = @subjectsselection + 'Isnull([' + @subjname + '],0) As ' + @subjname
set @subjects = @subjects + ','
set @subjectsselection = @subjectsselection + ','
FETCH NEXT FROM subject_cursor
INTO @subjname
End
CLOSE subject_cursor;
DEALLOCATE subject_cursor;
select @subjects = LEFT(@subjects, LEN(@subjects) - 1)
select @subjectsselection = LEFT(@subjectsselection, LEN(@subjectsselection) - 1)
print @subjects
print @subjectsselection
declare @query nvarchar(4000)
set @query = 'select Enroll_Number, ' + @subjectsselection + ' From '
set @query = @query + '(select Enroll_Number, Subject_Id, MarksObtained from Result ) ps '
set @query = @query + 'pivot(sum(MarksObtained) for Subject_Id in (' + @subjects + ')) as pvt'
exec sp_executesql @query
現在、私は次のようなo / pを取得しています....
Enroll_Number MT EN SC SS SM
11161 25 22 20 0 83
11166 0 0 0 21 0
ここでは、サブ SM の合計、つまり 24 + 69 = 83 を取得していますが、個々の学生の合計と平均が必要です
ここでの質問は、ユーザー CHICE ごとに手探りで結果を表示したいということです。
Enroll_No Student_Name Course_ID Semester Maths English Science Type Grand_Total Avg
11161 Mack B Botha MECH 1 25 22 20 internal1 67 66.22
すべてのコースと学期に科目の固定番号はありません..変更される可能性があります....そしてCourse_Idと学期ごとにグループ化する必要があります.ガイダンスとクエリをください.私のことを説明するのに十分です....私を助けてください....ありがとう