-
按照数据库第一范式:一个实体中不应该包含重复类型的特性,对应到表就是:类似的值不能在一个表的多个列上重复
-
创建表应该按照一维表的格式创建,记录产生信息。
-
若是建表的时候创建为二维表,将所有的种类做为字段,则可能出现表的字段非常的多,当种类有所添加的时候,后续还要继续添加字段。
-
一维表方便存储数据,同样也是便于后期查询
-
二维表可以直观的表现数据的信息,是用于展示的报表和报告
1. 透视转换
1.1 使用标准SQL进行数据透视
–注意这里实现业务场景,在CASE WHEN语句中
–我们应该使用默认的ELSE NULL ,而不是ELSE 0。没有数据是没有数据,0是0
SELECT Name,
SUM(CASE WHEN Subject =‘语文’ THEN Temp1.Scores ElSE NULL END) AS 语文 ,
SUM(CASE WHEN Subject =‘数学’ THEN Temp1.Scores ELSE NULL END) AS 数学 ,
SUM(CASE WHEN Subject =‘英语’ THEN Temp1.Scores ELSE NULL END) AS 英语
FROM Temp1 GROUP BY Temp1.Name
结果:
Name 英语 数学 语文
李四 60 70 90
张三 逆透视80 90 100
【说明】:使用标准的SQL语句进行数据的透视转换,我们可以直白的发现透视转换,是分为三个阶段的:
分组–>扩展–>聚合
以上例说明:
-
分组:我们按照Name字段进行分组,使每一个用户产生一条记录
-
使用GROUP BY实现分组
-
扩展:扩展是对列的扩展,使用case语句, 对三个科目(语文,数学,英语)扩展为列
-
使用SELECT 配合CASE WHEN实现
-
聚合:按照分组依据进行聚合,这里按照Name字段分组,使用SUM函数对Scores字段聚合
-
使用任一聚合函数聚合
对照上述三个逻辑步骤:
-
Name字段:分组依据字段(分组元素)。指定要用于透视结果表的左侧列,也称为设置键
-
Subject字段:待扩展字段(待扩展元素)。透视结果表中的列头所在的列,也称为透视键,"语文,数学,英语"为目标列的列名的集合,又称为透视输出列
-
Scores字段:聚合字段(聚合元素)。透视结果表中的主要显示的数据就是来自这个字段的值,又称为透视值
1.2 使用T-SQL中pivot函数进行数据透视
【函数】:pivot
【作用】:行转列函数,SQL Server2005
【语法】