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

=> 各行にすべての被験者の詳細が含まれます。例:

結果表:サンプルデータ

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 に答える