本文档《ujuku-mssql-58069.pdf》中详细介绍了如何使用SQL语句将纵向表结构的数据转换成横向表结构,并且在转换的基础上进行分组求平均值及总平均值的计算。以下是从文档内容中提炼的知识点。 ### SQL横向表转纵向表的方法 在数据库操作中,经常需要将纵向表(列的重复)转换为横向表(行的重复),这在数据库设计及报表展示中十分常见。文档中提供了将纵向数据转换为横向数据的示例,即通过子查询和条件聚合实现了这一点。 #### 创建表并插入数据 文档首先声明了一个临时表`@tab`,用于存放测试数据。这个表有四个字段:Class(班级)、Student(学生)、Course(课程)和Quantity(分数)。 ```sql declare @tab table(Class varchar(20), Student varchar(20), Course varchar(50), Quantity decimal(7,2)); ``` 接着,文档插入了数据以形成纵向表结构: ```sql insert into @tab(Class, Student, Course, Quantity) values ... ``` #### 数据查询和转换 数据转换的核心在于使用`CASE`语句来判断是否需要显示某个列,以及使用聚合函数(如`avg`)来计算平均值。具体到本例,使用`GROUP BY`语句对Class和Student进行分组,并通过`WITH ROLLUP`来扩展分组,以求得总平均值。 ```sql select (case when Grouping(Class)=1 then '总平均' when Grouping(Student)=1 then '' else Class end) as Class, (case when Grouping(Class)=1 then '' when Grouping(Student)=1 then '平均' else Student end) as Student, avg(语文) as 语文, avg(数学) as 数学, avg(英语) as 英语, avg(总分) as 总分 from ( select Class, Student, (select isnull(sum(Quantity),0) from @tab where Class=t.Class and Student=t.Student and Course='语文') as '语文', (select isnull(sum(Quantity),0) from @tab where Class=t.Class and Student=t.Student and Course='数学') as '数学', (select isnull(sum(Quantity),0) from @tab where Class=t.Class and Student=t.Student and Course='英语') as '英语', (select isnull(sum(Quantity),0) from @tab where Class=t.Class and Student=t.Student) as '总分' from @tab as t group by Class, Student ) as tempTab group by Class, Student, 语文, 数学, 英语, 总分 with rollup having Grouping(语文)=1 and Grouping(数学)=1 and Grouping(英语)=1; ``` 这段代码通过子查询的方式对每个课程的成绩进行求和,并在最外层查询中实现横向数据的聚合。`WITH ROLLUP`保证了分组数据能够产生额外的汇总行,即每组(班级)和总体(总平均)的平均分。 ### SQL聚合函数与分组统计 文档中的示例展示了如何使用聚合函数(如`sum`、`avg`等)进行数据的分组统计。聚合函数用于执行计算并返回单个值,能够对一组值执行数学运算,如求和、平均值、最大值或最小值等。在本例中,通过使用`avg`函数计算了不同分组下的平均分。 ### SQL GROUP BY与HAVING子句 `GROUP BY`语句用于结合聚合函数,根据一个或多个列对结果集进行分组。文档中的代码用`GROUP BY`对Class和Student进行了分组,以便计算每个学生的平均分。 另外,`HAVING`子句用于结合`GROUP BY`对分组的结果进行条件过滤。在这个例子中,`HAVING`子句确保了只显示那些对语文、数学和英语都有成绩记录的分组。 ### 总结 文档《ujuku-mssql-58069.pdf》通过详细的SQL语句示例,演示了如何将纵向表转换为横向表,并进行分组统计和求平均值。这不仅涉及到了SQL基础操作,如数据插入、表的创建,还涉及了高级查询技术,包括条件聚合和分组统计等概念。学习和掌握这些知识点对于进行复杂的数据分析和报表制作具有重要的实际意义。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- YOLOv8完整网络结构图详细visio
- LCD1602电子时钟程序
- 西北太平洋热带气旋【灾害风险统计】及【登陆我国次数评估】数据集-1980-2023
- 全球干旱数据集【自校准帕尔默干旱程度指数scPDSI】-190101-202312-0.5x0.5
- 基于Python实现的VAE(变分自编码器)训练算法源代码+使用说明
- 全球干旱数据集【标准化降水蒸发指数SPEI-12】-190101-202312-0.5x0.5
- C语言小游戏-五子棋-详细代码可运行
- 全球干旱数据集【标准化降水蒸发指数SPEI-03】-190101-202312-0.5x0.5
- spring boot aop记录修改前后的值demo
- 全球干旱数据集【标准化降水蒸发指数SPEI-01】-190101-202312-0.5x0.5