`

【SQL】——行列转换

 
阅读更多
--Create by Ranen
--bolg:http://blog.csdn.net/ranen2010
--原文链接:http://blog.csdn.net/Ranen2010/archive/2011/04/22/6341056.aspx

/*
源成绩表结构
StuName              cid         score
-------------------- ----------- -----------
Ranen                1           80
Ranen                2           84
Ranen                3           98
kevin                1           74
kevin                2           98
kevin                3           100
jacky                1           50
jacky                3           96

源课程表结构
ID          cName
----------- ------------------------------
1           C#
2           javascript
3           Sql Server

转换后表结构
StuName              C#          javascript  Sql Server
-------------------- ----------- ----------- -----------
jacky                50          NULL        96
kevin                74          98          100
Ranen                80          84          98

*/

Create Table CourseTable
(
ID int identity primary key,
cName nvarchar(30) not null
)
go
insert into CourseTable values('C#')
insert into CourseTable values('javascript')
insert into CourseTable values('Sql Server')

create table ScoreTable
(
StuName varchar(20) not null,--学生
cid int,--课程编号
score int --成绩
)
go
insert into ScoreTable values('Ranen',1,80)
insert into ScoreTable values('Ranen',2,84)
insert into ScoreTable values('Ranen',3,98)
insert into ScoreTable values('kevin',1,74)
insert into ScoreTable values('kevin',2,98)
insert into ScoreTable values('kevin',3,100)
insert into ScoreTable values('jacky',1,50)
insert into ScoreTable values('jacky',3,96)
go
--2000 静态行列转
select StuName,
max(case cname when 'C#' then Score else 0 end) C#,
max(case cname when 'javascript' then Score else 0 end) javascript,
max(case cname when 'Sql Server' then Score else 0 end) SqlServer
from (
select s.StuName,c.cName,s.Score from ScoreTable s
inner join CourseTable c on s.cid=c.id) T group by StuName

--2000 动态SQL
--insert into CourseTable values('html') --添加一门课程测试动态SQL
declare @sql varchar(500)
set @sql = 'select StuName'
select @sql = @sql + ' , max(case cname when '''+cName+''' then Score else 0 end) ['+cName+']'
from (select distinct cName from CourseTable) as c
set @sql = @sql + ' from  (select s.StuName,c.cName,s.Score from ScoreTable s
       inner join CourseTable c on s.cid=c.id) T group by StuName'

exec(@sql)
go


--2005 静态SQL
select * from (
select s.StuName,c.cName,s.Score from ScoreTable s
inner join CourseTable c on s.cid=c.id
) a pivot (max(Score) for cName in (C#,javascript,[Sql Server])) b

--2005 动态SQL
declare @sql varchar(500)
select @sql = isnull(@sql + ',' , '') + '['+cname+']' from CourseTable group by cName
exec ('select * from (
select s.StuName,c.cName,s.Score from ScoreTable s
inner join CourseTable c on s.cid=c.id
) a pivot (max(Score) for cName in (' + @sql + ')) b')
go
drop table CourseTable
drop table ScoreTable
分享到:
评论

相关推荐

    通过SQL语句实现行列转换的几种方法

    ### 通过SQL语句实现行列转换的几种方法 在日常工作中,我们经常需要处理的数据结构并不总是按照我们期望的方式组织的。特别是在制作自定义报表或进行产品开发时,经常会遇到需要将数据从一种布局转换到另一种布局...

    SQL的相关知识---行列转换

    ### SQL的相关知识——行列转换 在数据库操作过程中,经常需要对数据进行行列转换,以便更好地满足数据分析或报表展示的需求。本文将围绕一个具体的案例来详细解释如何利用SQL实现行列转换,包括静态转换与动态转换...

    sql 普通行列转换

    74 83 93 ——————- */ create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int) insert into tb values(‘张三’ , ‘语文’ , 74) insert into tb values(‘张三’ , ‘数学’ , 83) insert

    一个简单的SQL 行列转换语句

    【SQL 行列转换】在数据库开发中是一个常见的需求,特别是在数据分析和报表生成时。当需要将多行数据转换为一列或者将一列数据转换为多行时,行列转换技术就显得尤为重要。例如,标题中提到的问题是,有三个表格——...

    SQLServer能力提升

    首先,我们来探讨SQL Server的基础——SQL语句。SQL(Structured Query Language)是用于管理关系数据库的标准语言,包括了数据查询、数据更新、数据插入和数据删除等操作。掌握基础的SELECT、INSERT、UPDATE和...

    Hive语法详解

    它提供了类似SQL的查询语言——Hive SQL,使得用户能够方便地对Hadoop中的大规模数据进行提取、转换和加载(ETL)。Hive的特点包括: - **可伸缩性**:可以在Hadoop集群上动态增加节点以扩展处理能力。 - **可扩展...

    关于UNPIVOT 操作符

    UNPIVOT操作符主要用于数据库中的行列转换,即将原本多列数据转换为多行数据的一种方式。这种转换对于数据整理、分析及展示尤为重要,特别是在处理具有多维度数据的情况下。 #### 二、UNPIVOT的基本概念 ##### 1. ...

    Data Integrator 参考指南

    - **ReversePivot(RowstoColumns)**:行列转换操作之二。 - **Query**:执行查询操作。 - **Row_Generation**:生成行数据。 - **SQL**:直接执行SQL语句。 - **Table_Comparison**:比较表格数据差异。 - **...

    ETL工具比较大全,包含关键功能点

    在数据转换方面,无论是字段映射,拆分,记录的拆分与合并,还是行列变换,复杂的条件过滤,数学函数数据转换等功能,三款工具均表现优秀,展现了强大的数据处理能力。 #### 高级功能与数据质量 - **复杂条件过滤*...

    NC查询引擎使用详解[汇编].pdf

    《NC查询引擎使用详解》是针对用友NC二次开发平台中的一个重要组件——查询引擎的详细介绍。该文档旨在帮助软件开发者更好地理解和使用这个功能强大的工具,提高他们在软件开发过程中的效率和灵活性。 首先,文档...

    cmd操作命令和linux命令大全收集

    tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/...

    ETL工具比较分析(Informatica/Datastage/sagent)

    本文将针对市场上主流的三款ETL工具——Informatica PowerCenter、IBM DataStage以及Sagent Data Flow进行比较分析。 #### 二、操作系统支持 - **Informatica PowerCenter**:支持多种操作系统平台,包括HP-UX、...

    Python Cookbook

    12. **2.12 使用SQL的ORDER BY语法对对象进行排序**:介绍了一种模拟SQL查询中ORDER BY子句的方法来对对象列表进行排序。 #### 三、文本处理 本章聚焦于字符串操作,提供了大量的实用技巧。 1. **3.1 逐字符处理...

    2021-2022计算机二级等级考试试题及答案No.13214.docx

    #### 题目4:Java集合框架——List、Set与Map的区别 - **知识点**:List、Set和Map是Java集合框架中最常用的三种数据结构。 - **解析**: - **List**:特点是元素有序且允许重复。主要有两种实现类:`ArrayList`...

    2021-2022计算机二级等级考试试题及答案No.17254.docx

    - **选项解析**:本题考察Web资源的唯一标识——URL(Uniform Resource Locator,统一资源定位符)。 - A. URL:用于标识互联网上的资源位置及获取方式。 - B. WWW:World Wide Web(万维网),是基于HTTP协议的...

Global site tag (gtag.js) - Google Analytics