【问题标题】:how to get the sql horizontal database values vertically using asp.net如何使用asp.net垂直获取sql水平数据库值
【发布时间】:2015-05-15 06:34:52
【问题描述】:

我在 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));
            }

但不知道像上面那样动态插入标记...

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

【问题讨论】:

  • 查看数据透视表
  • 你可以像 Urili 所说的那样通过旋转来做到这一点,但是你有一定数量的主题吗?

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


【解决方案1】:

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

【讨论】:

  • 如何使用 sql 得到上述的总数
  • @Ramya 您要求的科目总数,您只需在SELECT 中添加,SUM(marks) AS Total。查看更新的答案
  • @sqluser 我已经使用了那个查询,我得到的是所有学生分数的总和,而不是个人分数....
  • 因为数据库中没有总分列我想动态添加每个主题值并将其显示为总分
  • 这应该显示每个学生的总分,因为它是按 studentId 分组的。向我展示您想要的输出,以便我提供帮助。
【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 2020-02-25
    • 1970-01-01
    • 2021-11-04
    • 2016-05-01
    • 2013-12-22
    • 2014-11-10
    相关资源
    最近更新 更多