0

我正在使用 VS 2008(asp.net with c#)SQL Server 2005....

主题表:

create table subject
(subid varchar(10),
subname varchar(20))

样本数据:

subid           subname

1               subject1
2               subject2
3               subject3

=> 它包括每行中所有主题的详细信息,例如:

结果表: Sampledata

studentid     subid        subname             marks

1             1            subject1            12
1             2            subject2            23
1             3            subject3            22
1             4            subject4            20

我想要这样的东西:

studentid     subject1    subject2    subject3    subject4

1             12          23          22           20

2

3

所以,我想用它来展示每个主题marks in column wise......

如果我创建一个静态表,例如...

create table subject    
(subject1 varchar(20),
 subject2 varchar(20),
 subject3 varchar(20))

注意:那么这是不可能的,因为每个学期的科目可能会发生变化(在科目表中)。这就是我想在 ASP.NET Web 表单中动态创建/编辑/删除表的原因。

4

1 回答 1

0

有几件事。首先,在结果表中,主题名称不是必需的,实际上是对数据库进行反规范化。应该是这样的:

studentid     subid        marks

1             1            12
1             2            23
1             3            22
1             4            20

现在,要查询:

SELECT s.subjname, r.studentid, r.marks
FROM subject s
    INNER JOIN result r on s.subid = r.subid

要获得您想要的表格,列出每个学生的分数,请使用如下所示的数据透视查询:

SELECT studentid, 
[Subject1], [Subject2], [Subject3], [Subject4]
FROM
(SELECT s.subjname, r.studentid, r.marks
    FROM subject s
        INNER JOIN result r on s.subid = r.subid
) AS SourceTable
PIVOT
(
AVG(marks)
FOR subjname IN ([Subject1], [Subject2], [Subject3], [Subject4])
) AS PivotTable;

您可以根据需要使数据透视查询动态化。无需即时构建动态表。

于 2012-05-06T04:15:44.290 回答