经典行转列例子

简介: /********************************************************************************课程表: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


如图


目录
相关文章
|
6月前
编译原理复习三:Bottom-Up LR(0)自动机构造 SLR(1)分析表与分析器的构造(附题目与答案 超详细)
编译原理复习三:Bottom-Up LR(0)自动机构造 SLR(1)分析表与分析器的构造(附题目与答案 超详细)
119 0
|
3月前
|
算法
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
聊聊一个面试中经常出现的算法题:组合运算及其实际应用例子
|
6月前
R语言表与因子(详细知识点,深入知识点后续会补充!)
R语言表与因子(详细知识点,深入知识点后续会补充!)
45 2
|
6月前
|
SQL 数据可视化 关系型数据库
【MySQL-11】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
【MySQL-11】多表查询全解-【多表关系/内外自连接/子查询/多表查询案例链接】(可cv代码&案例演示)
|
6月前
第六章连接和分组查询
第六章连接和分组查询
|
6月前
|
SQL OLAP HIVE
HQL的中级题目---炸裂函数、窗口函数
HQL的中级题目---炸裂函数、窗口函数
142 2
|
6月前
|
SQL HIVE
几道经典sql练习题
几道经典sql练习题
|
C++
C++ Primer Plus 第五章答案 循环和关系表达式
只有聪明人才能看见的摘要~( ̄▽ ̄~)~
63 0
|
数据可视化 数据挖掘 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)个元组
498 0
关系模型知识点总结(3)—— 关系操作中的关系代数(含题目及详细分析)