--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实现行列转换,包括静态转换与动态转换...
74 83 93 ——————- */ create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int) insert into tb values(‘张三’ , ‘语文’ , 74) insert into tb values(‘张三’ , ‘数学’ , 83) insert
有时在进行数据分析和报表生成时,需要进行行与列之间的数据转换,这在SQL中被称作行列转换。本文将通过一个具体的例子来展示如何使用SQL进行简单的行与列之间的转换。 先来看一个业务场景:一个公司拥有三个重要的...
首先,我们来探讨SQL Server的基础——SQL语句。SQL(Structured Query Language)是用于管理关系数据库的标准语言,包括了数据查询、数据更新、数据插入和数据删除等操作。掌握基础的SELECT、INSERT、UPDATE和...
它提供了类似SQL的查询语言——Hive SQL,使得用户能够方便地对Hadoop中的大规模数据进行提取、转换和加载(ETL)。Hive的特点包括: - **可伸缩性**:可以在Hadoop集群上动态增加节点以扩展处理能力。 - **可扩展...
UNPIVOT操作符主要用于数据库中的行列转换,即将原本多列数据转换为多行数据的一种方式。这种转换对于数据整理、分析及展示尤为重要,特别是在处理具有多维度数据的情况下。 #### 二、UNPIVOT的基本概念 ##### 1. ...
- **ReversePivot(RowstoColumns)**:行列转换操作之二。 - **Query**:执行查询操作。 - **Row_Generation**:生成行数据。 - **SQL**:直接执行SQL语句。 - **Table_Comparison**:比较表格数据差异。 - **...
在数据转换方面,无论是字段映射,拆分,记录的拆分与合并,还是行列变换,复杂的条件过滤,数学函数数据转换等功能,三款工具均表现优秀,展现了强大的数据处理能力。 #### 高级功能与数据质量 - **复杂条件过滤*...
《NC查询引擎使用详解》是针对用友NC二次开发平台中的一个重要组件——查询引擎的详细介绍。该文档旨在帮助软件开发者更好地理解和使用这个功能强大的工具,提高他们在软件开发过程中的效率和灵活性。 首先,文档...
tlist -t 以树行列表显示进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/tools文件夹内) kill -F 进程名 加-F参数后强制结束某进程(为系统的附加工具,默认是没有安装的,在安装目录的Support/...
12. **2.12 使用SQL的ORDER BY语法对对象进行排序**:介绍了一种模拟SQL查询中ORDER BY子句的方法来对对象列表进行排序。 #### 三、文本处理 本章聚焦于字符串操作,提供了大量的实用技巧。 1. **3.1 逐字符处理...
#### 题目4:Java集合框架——List、Set与Map的区别 - **知识点**:List、Set和Map是Java集合框架中最常用的三种数据结构。 - **解析**: - **List**:特点是元素有序且允许重复。主要有两种实现类:`ArrayList`...
- **选项解析**:本题考察Web资源的唯一标识——URL(Uniform Resource Locator,统一资源定位符)。 - A. URL:用于标识互联网上的资源位置及获取方式。 - B. WWW:World Wide Web(万维网),是基于HTTP协议的...