目录一、横表简单概述二、纵表简单概述三、纵表转横表代码如下以及视图展示四、横表转纵表代码如下以及视图展示五、横表、纵表优点与缺点六、总结
横表是普通的建表方式。例如:表结构为主键、字段1、字段2、字段3…。
纵表的表结构为主键、字段代码、字段值,字段代码则为字段1、字段2、字段3…。
1.纵表视图如下:
2.纵表转换成横表视图如下:
3.sql语句如下所示:
select student_name,
sum(case ts.subject when ‘C语言’ then ts.score else ” end) as C语言,
sum(case ts.subject when ‘数据结构’ then ts.score else ” end) as 数据结构,
sum(case ts.subject when ‘操作系统’ then ts.score else ” end) as 操作系统
from t_student ts
group by ts.student_name;
sum(case ts.subject when ‘C语言’ then ts.score else ” end) as C语言,
sum(case ts.subject when ‘数据结构’ then ts.score else ” end) as 数据结构,
sum(case ts.subject when ‘操作系统’ then ts.score else ” end) as 操作系统
from t_student ts
group by ts.student_name;
1.横表视图如下:
2.横表转换成纵表视图如下:
3.sql语句如下所示:
select ts.studnet_name,
‘C语言’ as 科目,
ts.`C语言` as 成绩
from t_student1 ts
union all
select ts.studnet_name,
‘数据结构’ as 科目,
ts.`数据结构` as 成绩
from t_student1 ts
union all
select ts.studnet_name,
‘操作系统’ as 科目,
ts.`操作系统` as 成绩
from t_student1 ts
order by studnet_name,科目
‘C语言’ as 科目,
ts.`C语言` as 成绩
from t_student1 ts
union all
select ts.studnet_name,
‘数据结构’ as 科目,
ts.`数据结构` as 成绩
from t_student1 ts
union all
select ts.studnet_name,
‘操作系统’ as 科目,
ts.`操作系统` as 成绩
from t_student1 ts
order by studnet_name,科目
1.横表
优点:一行表示了一个实体记录,清晰可见。
缺点:如果现在要给这个表加一个字段,那么就必须重建表结构。
2.纵表
优点:如果现在要给这个表加一个字段,只需要添加一些记录。
缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先group by,较繁琐
应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。
到此这篇关于SQL如何实现横表与纵表相互转换的文章就介绍到这了,更多相关SQL 横表与纵表转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:Mysql纵表转换为横表的方法及优化教程SQL Server纵表与横表相互转换的方法
© 版权声明
文章版权归作者所有,未经允许请勿转载。