SQL2005 行列转换(巩固篇)
来源:互联网 发布:网络隐私权保护 编辑:程序博客网 时间:2024/06/06 00:28
---------------------------------
-- Author: htl258(Tony)
-- SuBject: SQL2005行列互转整理
-- Date : 2009-08-20 21:00:00
---------------------------------
--1.行转列
If not object_id('[tb]') is null
Drop table [tb]
Go
create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
Insert tb
Select '张三','语文',60 union all
Select '张三','数学',70 union all
Select '张三','英语',80 union all
Select '张三','物理',90 union all
Select '李四','语文',65 union all
Select '李四','数学',75 union all
Select '李四','英语',85 union all
Select '李四','物理',95
go
--静态查询:
select * from tb pivot(max(分数) for 课程 in(语文,数学,英语,物理)) b
--动态查询:
declare @s varchar(max)
select @s=isnull(@s+',','')+课程 from tb group by 课程
select @s='select * from tb pivot(max(分数) for 课程in('+@s+'))b'
exec(@s)
/*
姓名 语文 数学 英语 物理
---------- ----------- ----------- ----------- -----------
李四 65 75 85 95
张三 60 70 80 90
(2 行受影响)
*/
--加上总分静态查询
select 姓名,语文,数学,英语,物理,总分
from (select *,总分=sum(分数)over(partition by 姓名) from tb) a
pivot(max(分数) for 课程 in(语文,数学,英语,物理))b
--加上总分动态查询
declare @s varchar(max)
select @s=isnull(@s+',','')+课程 from tb group by 课程
select @s='
select 姓名,'+@s+' from
(select *,总分=sum(分数)over(partition by 姓名) from tb) a
pivot(max(分数) for 课程in('+@s+'))b'
exec(@s)
/*
姓名 语文 数学 英语 物理 总分
---------- ----------- ----------- ----------- ----------- -----------
张三 60 70 80 90 300
李四 65 75 85 95 320
(2 行受影响)
*/
--2.列转行
If not object_id('tb') is null
Drop table tb
Go
Create table tb(姓名 nvarchar(2),[语文] int,[数学] int,[英语] int,[物理] int)
Insert tb
Select '张三',60,70,80,90 union all
Select '李四',65,75,85,95
Go
--静态查询
select * from tb unpivot(分数 for 课程 in(语文,数学,英语,物理))b
--动态查询
declare @s varchar(max)
select @s=isnull(@s+',','')+name from syscolumns where id=object_id('tb') and name not in('姓名') order by colid
select @s='select * from tb unpivot(分数for 课程in('+@s+'))b'
exec(@s)
/*
姓名 分数 课程
------ ---- ------
李四65 语文
李四75 数学
李四85 英语
李四95 物理
张三60 语文
张三70 数学
张三80 英语
张三90 物理
(8 行受影响)
*/
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2009/08/20/4467882.aspx
- SQL2005 行列转换(巩固篇)
- SQL2005 行列转换(巩固篇)
- SQL2005 行列转换(巩固篇)
- sql2005 行列转换的例子
- SQl2005行列转换 pivot/unpivot
- SQL 2000,SQL2005 行列转换
- sql2005《新》行列转换的使用(使用pivot函数)
- SQL2000 和 SQL2005 下 行列转换 示例
- SQL2000 和 SQL2005 下 行列转换 示例
- SQL2005行列转换的另一方法 PIVOT
- sql2000,sql2005 行列转换(又称横竖转换,胖瘦转换)
- 行列转换(行转列)
- oracle行列转换(转)
- 行列转换(列转行)
- SQL行列转换(1)
- SQL行列转换(2)
- Oracle行列转换(全)
- Oracle12C--行列转换(十五)
- 动态sql语句基本语法
- WPF从我炫系统5---基本控件的用法
- JS获取本地IP、MAC地址
- SQL2008 Merge关键字用法与简例
- 取得指定excel文件内的sheet数及每一个sheet的列数
- SQL2005 行列转换(巩固篇)
- sql xml 入门
- DDL触发器捕获建表语句
- 解决QTP在某些windows应用程序中对edit控件的set失败问题
- 寻找安静的心
- 将一个XML文本显示成行
- ASP.NET编程全能词典简介
- 全文检索学习
- 在库TEST上建立全文索引