我正在使用带有 c# 的 SQL Server 2005 和 asp.net 2008 ...我有 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
第二张桌子是这样的...
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
目前我越来越喜欢....
Enroll_Number MT EN SC SS SM
11161 25 22 20 0 83
11166 0 0 0 21 0
在这里,我得到子 SM 的总和,即 24 + 69 = 83,但我希望每个学生的总数和平均值
现在的问题是我想通过根据用户的选择来显示结果....例如,如果用户只想查看Course_Id = MECH 和 Semester = 1 ....o/p 应该是....
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 和 Semester 分组给我指导和查询,以便我实施您的答案....我希望这些信息足以解释我的东西....请帮帮我先生....谢谢