本文共 919 字,大约阅读时间需要 3 分钟。
优点:一行表示了一个实体记录,清晰可见,一目了然。
缺点:如果现在要给这个表加一个字段,那么就必须重建表结构。
优点:如果现在要给这个表加一个字段,只需要添加一些记录。
缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先group by,较繁琐。
应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
先有纵表student(学生表),字段名就比较直观化
怎么把他变成我们想要的横表呢 下面就是SQL语句
select s.`name` '姓名',SUM(case s.kemu when '语文' then s.chengji else 0 end) as '语文',SUM(case s.kemu when '数学' then s.chengji else 0 end) as '数学',SUM(case s.kemu when '英语' then s.chengji else 0 end) as '英语'from student sgroup by s.`name`;
这个是最直观的,也是特别简介易懂的.
SUM(case s.kemu when ‘语文’ then s.chengji else 0 end) as ‘语文’
单独进行一个个成绩的处理.取科目为’语文’的值其他取0进行求和
这里SUM也可以换成其他函数来结合需求处理比如MAX,MIN等等…先有横表student(学生表),字段名就比较直观化
怎么把他变成我们想要的纵表呢
select s.姓名,s.语文 as 'chengji','语文' as 'kemu'from student s union all select s.姓名,s.数学 as 'chengji','数学' as 'kemu'from student s union all select s.姓名,s.英语 as 'chengji','英语' as 'kemu'from student s order by s.姓名, 'kemu';
转换结果;
转载地址:http://ybezi.baihongyu.com/