C# 如何使用asp.net垂直获取sql水平数据库值

C# 如何使用asp.net垂直获取sql水平数据库值,c#,asp.net,sql-server,datatables,C#,Asp.net,Sql Server,Datatables,我在SQLServer中有一个表,如下所示 studentid subject marks 1 telugu 70 1 english 80 1 maths 90 1 social 70 studentid telugu english maths social total 1

我在SQLServer中有一个表,如下所示

studentid     subject    marks
    1          telugu      70
    1         english      80
    1           maths       90
    1           social      70
 studentid   telugu   english   maths   social    total 
    1            70       80         90      70      310 
while (dr.Read())
            {
               dt.Columns.Add(dr["subname"].ToString(), typeof(string));
            }
我想在gridview中显示上表,如下所示

studentid     subject    marks
    1          telugu      70
    1         english      80
    1           maths       90
    1           social      70
 studentid   telugu   english   maths   social    total 
    1            70       80         90      70      310 
while (dr.Read())
            {
               dt.Columns.Add(dr["subname"].ToString(), typeof(string));
            }
我尝试使用datatable,如下所示

我动态创建了datacolumns,如下所示

studentid     subject    marks
    1          telugu      70
    1         english      80
    1           maths       90
    1           social      70
 studentid   telugu   english   maths   social    total 
    1            70       80         90      70      310 
while (dr.Read())
            {
               dt.Columns.Add(dr["subname"].ToString(), typeof(string));
            }
但并没有像上面那样动态插入标记的想法

提前谢谢。。。。
请帮助我…

这里有一个使用pivot的解决方案(DB端的解决方案):


下面是一个使用pivot的解决方案(DB端的解决方案):


另一种方法是使用
CASE

 SELECT studentid
        ,MAX(CASE WHEN subject = 'telugu' THEN marks END) AS telugu
        ,MAX(CASE WHEN subject = 'english' THEN marks END) AS english
        ,MAX(CASE WHEN subject = 'maths' THEN marks END) AS maths
        ,MAX(CASE WHEN subject = 'social' THEN marks END) AS social
        ,SUM(marks) AS Total
 FROM yourTable
 GROUP BY studentid

另一种方法是使用
CASE

 SELECT studentid
        ,MAX(CASE WHEN subject = 'telugu' THEN marks END) AS telugu
        ,MAX(CASE WHEN subject = 'english' THEN marks END) AS english
        ,MAX(CASE WHEN subject = 'maths' THEN marks END) AS maths
        ,MAX(CASE WHEN subject = 'social' THEN marks END) AS social
        ,SUM(marks) AS Total
 FROM yourTable
 GROUP BY studentid

看看透视表你可以像Urili说的那样旋转,但是你有一定数量的主题吗?看看透视表你可以像Urili说的那样旋转,但是你有一定数量的主题吗?如何使用sql@Ramya您要求的科目总数,只需添加
,总和(分数)作为总计
中选择
。查看更新后的答案@sqluser我已经使用了该查询,我得到的是所有学生分数的总和,而不是单个分数的总和……因为数据库中没有总分数的列,所以我想动态添加每个科目的值,并将其显示为总分数。这应该显示每个学生的总分数,因为它是按studentId分组的。告诉我你想要的输出,这样我就可以提供帮助。如何使用sql@Ramya您要求的科目总数,只需在
选择
中添加
,合计(分数)作为总数
。查看更新后的答案@sqluser我已经使用了该查询,我得到的是所有学生分数的总和,而不是单个分数的总和……因为数据库中没有总分数的列,所以我想动态添加每个科目的值,并将其显示为总分数。这应该显示每个学生的总分数,因为它是按studentId分组的。给我看看你想要的结果,这样我就能帮你了。