您的位置:首页 > 其它

[置顶] 纵表和横表的概念及其相互转换

2017-04-10 14:55 176 查看

纵表和横表的概念及其相互转换

如有疑问可参考原博

横表就是普通的建表方式,如:主键、属性1、属性2、属性3…等很多属性的铺陈, 如果变成纵表后,则表结构为: 主键、属性。例如:

横表:



纵表:



横表

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

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

纵表

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

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

结论

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

纵表转横表

有如下纵表:



将其转为横表:

select
s.student_name,
sum(case s.subject when '语文' then s.score end)  as 语文,
sum(case s.subject when '数学' then s.score end)  as 数学,
sum(case s.subject when '英语' then s.score end)  as 英语
from score_vertical s
group by s.student_name


结果:



横表转纵表

有如下横表:

将其转为纵表:

select  s.student_name,
'语文' as 科目,
s.语文 as 成绩
from score_horizontal s

union all

select  s.student_name,
'数学' as 科目,
s.数学 as 成绩
from score_horizontal s

union all

select  s.student_name,
'英语' as 科目,
s.英语 as 成绩
from score_horizontal s

order by student_name, 科目


结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: