经典行转列例子

简介: /********************************************************************************课程表:Course******************************...

/*******************************************************************************
*课程表:Course
********************************************************************************/
CREATE TABLE #Course ( CourseName VARCHAR(10) );
INSERT  INTO #Course
        ( CourseName )
VALUES  ( '语文' ),
        ( '数学' ),
        ( '英语' )


SELECT  *
FROM    #Course

/*******************************************************************************
*学生成绩表:Score
********************************************************************************/
CREATE TABLE #Score
    (
      StudentName VARCHAR(10) ,
      CourseName VARCHAR(10) ,
      Score INT
    );
INSERT  INTO #Score
        ( StudentName, CourseName, Score )
VALUES  ( '小红', '语文', 76 ),
        ( '小红', '数学', 85 ),
        ( '小红', '英语', 55 ),
        ( '小李', '语文', 90 ),
        ( '小李', '英语', 74 ),
        ( '小林', '语文', 87 ),
        ( '小林', '数学', 90 )


SELECT  *
FROM    #Score

/*******************************************************************************
*组织所有的课程
********************************************************************************/
DECLARE @CourseName VARCHAR(200) = ''
DECLARE @SelectSQL NVARCHAR(2000)
DECLARE @sql NVARCHAR(2000)

SELECT  @CourseName = @CourseName + '[' + CourseName + '],'
FROM    #Course


SET @CourseName = LEFT(@CourseName, LEN(@CourseName) - 1)


/*******************************************************************************
*行转列操作
********************************************************************************/
SET @SelectSQL = 'SELECT pvt.*
 FROM
 (
   SELECT StudentName, CourseName, Score FROM #Score
 ) p
 PIVOT( SUM(Score) For CourseName in ({0})) AS pvt'


SET @SelectSQL = REPLACE(@SelectSQL, '{0}', @CourseName)                
EXEC sp_executesql @SelectSQL

/*总分*/
SET @sql = ' SELECT m.* , n.total
FROM
(
    SELECT * FROM
        (
            SELECT * FROM #Score
        ) p
        PIVOT (SUM(Score) FOR CourseName in ('+ @CourseName + ')) b
) m ,
(
SELECT StudentName,sum(Score) AS total from #Score
GROUP BY StudentName
)n
WHERE m.StudentName= n.StudentName'

EXEC sp_executesql @sql
/*******************************************************************************
*删除临时表
********************************************************************************/
DROP TABLE #Course

DROP TABLE #Score


如图


目录
相关文章
|
1月前
|
存储 Python
顺序程序设计举例
在编程中,顺序程序设计是一种基本的程序设计方法,它按照语句或指令在程序中出现的顺序依次执行。这种程序设计方法相对简单,易于理解,尤其适合初学者入门。下面,我们将通过一个简单的例子来展示顺序程序设计的过程,并附上相应的代码。
12 0
|
7月前
|
API 索引
通过一个实际的例子学习 combineLatest
通过一个实际的例子学习 combineLatest
38 0
|
11月前
|
数据可视化 数据挖掘 Python
答读者问:R语言批量做一元线性回归的简单小例子
答读者问:R语言批量做一元线性回归的简单小例子
|
人工智能 vr&ar
关系模型知识点总结(3)—— 关系操作中的关系代数(含题目及详细分析)
我们设R是n目关系,有K1个元组,S是m目关系,有K2个元组,那么他们的笛卡儿积其实就是排列组合,如果将R关系中的每一行看作是abc,S关系中的每一行看作是xyz,那么他们两两组合的方式一共有9种,故 当R有K1个元组,S有K2个元组时,R和S的笛卡儿积行一共有K1×K2个元组;而由于每个关系里都有各自属性,所以R和S的笛卡儿积列一共有(m+n)个元组
279 0
关系模型知识点总结(3)—— 关系操作中的关系代数(含题目及详细分析)
|
关系型数据库 MySQL
【MySQL】数据库函数通关教程上篇(聚合、数学、字符串、日期、控制流函数)(下)
文章目录 写在前面 1 聚合函数 1.1 GROUP_CONCAT() 1.2 其他聚合函数 2 数学函数 3 字符串函数 4 日期函数 4.1 常见日期函数与使用 4.2 日期格式 5 控制流函数 5.1 if逻辑判断语句 5.2 case when语句
【MySQL】数据库函数通关教程上篇(聚合、数学、字符串、日期、控制流函数)(下)
|
关系型数据库 MySQL
【MySQL】数据库函数通关教程上篇(聚合、数学、字符串、日期、控制流函数)(上)
文章目录 写在前面 1 聚合函数 1.1 GROUP_CONCAT() 1.2 其他聚合函数 2 数学函数 3 字符串函数 4 日期函数 4.1 常见日期函数与使用 4.2 日期格式 5 控制流函数 5.1 if逻辑判断语句 5.2 case when语句
【MySQL】数据库函数通关教程上篇(聚合、数学、字符串、日期、控制流函数)(上)
Python编程语言学习:判断两个列表是否对应完全相等(巧解输出是一摸一样的列表数据,但就是不相等)
Python编程语言学习:判断两个列表是否对应完全相等(巧解输出是一摸一样的列表数据,但就是不相等)
|
SQL 数据库
把业务逻辑变成数据结构和SQL语句的例子。自然架构改成自然框架
    更正:和大家交流了一下,发现现在就叫做架构有一点大,还是叫做框架更准确一些,就叫做自然框架吧。     目前自然框架的内容包括三个部分:使用自定义控件快速实现增删改查和导出Excel、通用权限、个性化设置。
1028 0
|
数据处理 Windows
数据处理第一节:选取列的基本到高级方法
博客原文:https://suzan.rbind.io/2018/01/dplyr-tutorial-1/ 作者:Suzan Baert 注意:所有代码都将作为管道的一部分呈现,即使它们中的任何一个都不是完整的管道。
990 0
|
Python
动态规划法(九)想要更多例子?
  本文将会介绍三个用动态规划法解决的例子,分别是: 楼梯台阶问题 二项式系数求解 最大乘积子数组问题 楼梯台阶问题 一个n阶的楼梯,一个婴儿每次爬一阶或两阶,试问一共有多少种办法爬完楼梯。
1488 0

热门文章

最新文章