SQL中动态进行行转列
课程表
CREATE TABLE [dbo].[demo_Course](
[Cid] [uniqueidentifier] NOT NULL,
[CourseName] [varchar](50) NULL,
CONSTRAINT [PK_demo_Course] PRIMARY KEY CLUSTERED
(
[Cid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
学员表
CREATE TABLE [dbo].[demo_Student](
[Sid] [uniqueidentifier] NOT NULL,
[Pid] [uniqueidentifier] NULL,
[StudentName] [varchar](50) NULL,
[JoinDate] [datetime] NULL,
[Sex] [int] NULL,
[Old] [int] NULL,
CONSTRAINT [PK_demo_Student] PRIMARY KEY CLUSTERED
(
[Sid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
成绩表
CREATE TABLE [dbo].[demo_Score](
[Sid] [uniqueidentifier] NOT NULL,
[Cid] [uniqueidentifier] NOT NULL,
[Score] [int] NOT NULL
) ON [PRIMARY]
行转列
Declare @sql varchar(8000)
Set @sql = 'Select Sid'
Select @sql = @sql + ',max(case CourseName when '''+CourseName+''' then Score else 0 end) ['+CourseName+']'
from demo_Course as cj --把所有唯一的科目的名称都列举出来
Select @sql = @sql+' from (select s.sid , c.CourseName , s.Score from demo_Course c left join demo_Score s on c.Cid = s.Cid) t group by Sid'
print (@sql)
上面这段输出的SQL如下:
Select Sid,max(case CourseName when '数学' then Score else 0 end) [数学],
max(case CourseName when '英语' then Score else 0 end) [英语],
max(case CourseName when '语文' then Score else 0 end) [语文] from
(select s.sid , c.CourseName , s.Score from demo_Course c left join demo_Score s on c.Cid = s.Cid) t group by Sid
SQL中动态进行行转列的更多相关文章
- Android中动态设置GridView的列数、列宽和行高
在使用GridView时我们知道,列数是可以通过设计时的属性来设置的,列的宽度则是根据列数和GridView的宽度计算出来的.但是有些时候我们想实现列数是动态改变的效果,即列的宽度保持某个值,列的数量 ...
- SQL 中如何删除重复(每列数据都重复)的记录,只保留一行?
如果数据表没有做好约束,那么数据库中难免会遇到数据重复的情况.今天就遇到这么个看起来简单却又费神的问题---如何去重. ------期间感谢微信公众号"有关SQL"的博主大牛提供的 ...
- MYSQL中动态行数据转列数据
最近用到城市矩阵相关 需要将城市与城市距离转化为二维表 通过动态SQL直接实现 贴出来一起学习: 表就三个字段,包含在sql内. SET @sql:=''; SELECT @sql:=GROUP_CO ...
- sql 中如何查询某一列的数据在另一个表中有没有?
假设表table1,列a,表table2,列bselect a from table1where a not in(select b from table2)
- 运用DataTable进行行转列操作
public DataTable GetReverseTable(DataTable p_Table) { DataTable _Table = new DataTable(); ; i != p_T ...
- sql中在查询时两列合并为一列
select a + ' '+b as ab from tableName 如果是有整型的(例,b字段为int类型): select a +' '+Convert(VARCHAR(50),b) a ...
- SQL Server中动态列转行
http://www.cnblogs.com/gaizai/p/3753296.html 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现 ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- SQL Server 动态行转列(轉載)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段; 方法二:使用拼接SQL, ...
随机推荐
- Core Graphics Layer Drawing
[Core Graphics Layer Drawing] CGLayer objects (CGLayerRef data type) allow your application to use l ...
- Linux umask权限
文件基本权限 Linux中文件权限由三部分组成: rw-r--r-- 前三位:表示用户所拥有的权限 中三位:表示用户所在组的权限 后三们:表示其他用户的权限 权限 八进制 十进制 - - - 000 ...
- [label][webSites]一个结合Google地图的图片浏览网站
内容中包含 base64string 图片造成字符过多,拒绝显示
- Oracle EBS 初始化用户密码
---修改密码,并且将限制用户下次登录的时候(第一次登录),强制要换一个新的口令: ---此过程可以完全模拟我们在标准用户的Form里面初始化用户的密码的动作! ---最后要说明的是,这个处理过程 ...
- task3:词频统计
相关的类: java.util.regex.Pattern static Pattern compile(String regex) //编译模式 static Pattern compile(Str ...
- 第六章:shiro Realm相关对象
Shiro 中的 AuthenticationToken AuthenticationToken 用于收集用户提交的身份(如用户名)及凭据(如密码).Shiro会调用CredentialsMatche ...
- 浏览器兼容性随手记:Javascript
1.event IE9以下不支持直接获取event对象,所以需要写兼容: var event = event?event:window.event; IE8以下不支持event.target,但是可以 ...
- django系列1--介绍与简单原理, wsgiref模块
一.web应用框架 Web应用框架(Web application framework)是一种计算机软件框架,用来支持动态网站.网络应用程序及网络服务的开发.这种框架有助于减轻网页开发时共通性活动的工 ...
- jQuery中的each, data, 插件
一. each() $(' ').each(function (){...}) jQuery.each(collection, callback(indexInArray, valueOfEleme ...
- python网络编程--管道,信号量,Event,进程池,回调函数
1.管道 加锁可以保证多个进程修改同一块数据时,同一时间只能有一个任务可以进行任务修改,即串行修改,速度慢了,但牺牲了速度却保证了数据安全. 文件共享数据实现进程间的通信,但问题是: 1.效率低(共享 ...