电脑一台
SQL Server 数据库,本人使用的2008版本
前面废话太多了,这里直接切入正题。首先,我先讲解横列转换成纵列的实现方法,主要还是以图片的形式展现出来,我也会把实现的SQL语句粘贴出来方便大家复制。
例如怎么将上图转换成下图呢?就是把名字合并在一起,以科目名称为列名,成绩显示在列名下面。主要实现的思路是判断Course列的值,如果和转换后列名相同则该列的值为Grade,否则为0,最后按Name排序。结果在语句下面可以看到
--纵表转横表,A为表名,A表中有Name,Course,Grade三列select Name,SUM(case Course when '语文' then Grade else 0 end) as 语文,SUM(case Course when '数学' then Grade else 0 end) as 语文,SUM(case Course when '英语' then Grade else 0 end) as 语文from A group by Name --Name代表姓名,Course为考试科目名称,Grade为考试分数
如果碰到纵列转换成横列呢?下面我就来介绍,就是我想要每名同学每一科为一横排,这个要稍微复杂一些,可以理解为:把“语文”列的值赋给”成绩“,新建一列“科目”,里面存储“语文”,把这个过程重新执行两遍,不过把”语文“更换成”数学“、”英语“然后把他们合并起来,并按姓名、科目降序排列。
在这里给大家一些建议,遇到没见过的问题,解决后把解决方法或者思路保存下来,例如把下面的SQL语句以sql文件形式保存下来,人总是健忘的,下次遇到忘了,很方便就可以找到,在SQL语句中可以添加注释的,例如上面的 -- 符号就是行注释符号。
有任何关于数据库的问题可以问我,虽然我不一定懂,但是可以相互讨论,如果这篇经验的确帮助到你,麻烦帮忙投我一票,谢谢!!