SQL如何实现横表与纵表相互转换(sql横表变竖表)墙裂推荐

随心笔谈2年前发布 admin
202 0 0

文章摘要

这篇文章介绍了**横表**和**纵表**的概念及其在数据库设计中的应用,并详细说明了如何通过SQL代码实现两者之间的转换。文章提到了横表的结构(主键、字段1、字段2等)以及纵表的结构(主键、字段代码、字段值)。通过提供具体的SQL语句和视图展示,文章展示了如何将纵表转换为横表,以及如何将横表转换为纵表。 文章还比较了两种表结构的优缺点:横表优点是一行表示一个实体记录,缺点是如果需要添加字段,必须重建表结构;纵表优点是容易添加字段,缺点是数据描述不清晰且可能导致大量记录。文章建议根据具体需求选择表结构:如果表结构不易改动,采用横表;如果需要频繁改动或分组统计,采用纵表。 这篇文章还提示了更多关于横表与纵表转换的SQL知识,并鼓励读者查阅更多相关文章。



目录一、横表简单概述二、纵表简单概述三、纵表转横表代码如下以及视图展示四、横表转纵表代码如下以及视图展示五、横表、纵表优点与缺点六、总结

横表是普通的建表方式。例如:表结构为主键、字段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;

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,科目

1.横表

优点:一行表示了一个实体记录,清晰可见。

缺点:如果现在要给这个表加一个字段,那么就必须重建表结构。

2.纵表

优点:如果现在要给这个表加一个字段,只需要添加一些记录。

缺点:数据描述不是很清晰,而且会造成数据库数据很多。另如果需要分组统计,要先group by,较繁琐

应该把不容易改动表结构的设计成横表,把容易经常改动不确定的表结构设计成纵表。

到此这篇关于SQL如何实现横表与纵表相互转换的文章就介绍到这了,更多相关SQL 横表与纵表转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:Mysql纵表转换为横表的方法及优化教程SQL Server纵表与横表相互转换的方法

© 版权声明

相关文章