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

时间:2015-05-15 06:34:53

标签: c# asp.net sql-server datatables

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

studentid     subject    marks
    1          telugu      70
    1         english      80
    1           maths       90
    1           social      70

我想在gridview中显示上表,如下所示

 studentid   telugu   english   maths   social    total 
    1            70       80         90      70      310 

我尝试使用数据表,如下所示

我动态创建了数据列,如下所示

while (dr.Read())
            {
               dt.Columns.Add(dr["subname"].ToString(), typeof(string));
            }

但没有想到插入动态显示的标记......

提前感谢.... 请帮帮我......

2 个答案:

答案 0 :(得分:2)

这是使用pivot的解决方案(来自DB端的解决方案):

IF(OBJECT_ID('Example','U') IS NOT NULL)
    DROP TABLE Example
CREATE TABLE Example (studentid INT,subject VARCHAR(30), marks INT)
INSERT INTO Example VALUES
(1,'telugu',70),
(1,'english',80),
(1,'maths',90),
(1,'social',70),
(2,'telugu',70),
(2,'english',80),
(2,'maths',90),
(2,'social',70)

SELECT studentid,[telugu],[english],[maths],[social] FROM Example
PIVOT
(
    MAX(marks)
    FOR subject IN ([telugu],[english],[maths],[social])
) AS pvt

答案 1 :(得分:2)

使用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