




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*标题:普通行列转换(version 2.0)作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)时间:-03-09地点:广东深圳说明:普通行列转换(version 1.0)仅针对sql server 2000提供静态和动态写法,version 2.0增加sql server 2005的有关写法。问题:假设有张学生成绩表(tb)如下:姓名课程分数张三语文74张三数学83张三物理93李四语文74李四数学84李四物理94想变成(得到如下结果):姓名语文数学物理- - - -李四74 84 94张三74 83 93-*/create table tb(姓名varchar(10) , 课程varchar(10) , 分数int)insert into tb values(张三 , 语文 , 74)insert into tb values(张三 , 数学 , 83)insert into tb values(张三 , 物理 , 93)insert into tb values(李四 , 语文 , 74)insert into tb values(李四 , 数学 , 84)insert into tb values(李四 , 物理 , 94)go-SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)select 姓名as 姓名, max(case 课程when 语文 then 分数else 0 end) 语文, max(case 课程when 数学 then 分数else 0 end) 数学, max(case 课程when 物理 then 分数else 0 end) 物理from tbgroup by 姓名-SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)declare sql varchar(8000)set sql = select 姓名select sql = sql + , max(case 课程when + 课程+ then 分数else 0 end) + 课程+ from (select distinct 课程from tb) as aset sql = sql + from tb group by 姓名exec(sql) -SQL SERVER 2005 静态SQL。select * from (select * from tb) a pivot (max(分数) for 课程in (语文,数学,物理) b-SQL SERVER 2005 动态SQL。declare sql varchar(8000)select sql = isnull(sql + , , ) + 课程from tb group by 课程set sql = + sql + exec (select * from (select * from tb) a pivot (max(分数) for 课程in ( + sql + ) b)-/*问题:在上述结果的基础上加平均分,总分,得到如下结果:姓名语文数学物理平均分总分- - - - - -李四74 84 94 84.00 252张三74 83 93 83.33 250*/-SQL SERVER 2000 静态SQL。select 姓名姓名, max(case 课程when 语文 then 分数else 0 end) 语文, max(case 课程when 数学 then 分数else 0 end) 数学, max(case 课程when 物理 then 分数else 0 end) 物理, cast(avg(分数*1.0) as decimal(18,2) 平均分, sum(分数) 总分from tbgroup by 姓名-SQL SERVER 2000 动态SQL。declare sql varchar(8000)set sql = select 姓名select sql = sql + , max(case 课程when + 课程+ then 分数else 0 end) + 课程+ from (select distinct 课程from tb) as aset sql = sql + , cast(avg(分数*1.0) as decimal(18,2) 平均分, sum(分数) 总分from tb group by 姓名exec(sql) -SQL SERVER 2005 静态SQL。select m.* , n.平均分, n.总分from(select * from (select * from tb) a pivot (max(分数) for 课程in (语文,数学,物理) b) m,(select 姓名, cast(avg(分数*1.0) as decimal(18,2) 平均分, sum(分数) 总分from tb group by 姓名) nwhere m.姓名= n.姓名-SQL SERVER 2005 动态SQL。declare sql varchar(8000)select sql = isnull(sql + , , ) + 课程from tb group by 课程exec (select m.* , n.平均分, n.总分from(select * from (select * from tb) a pivot (max(分数) for 课程in ( + sql + ) b) m , (select 姓名, cast(avg(分数*1.0) as decimal(18,2) 平均分, sum(分数) 总分from tb group by 姓名) nwhere m.姓名= n.姓名)drop table tb -/*问题:如果上述两表互相换一下:即表结构和数据为:姓名语文数学物理张三74李四74想变成(得到如下结果):姓名课程分数- - -李四语文74李四数学84李四物理94张三语文74张三数学83张三物理93-*/create table tb(姓名varchar(10) , 语文int , 数学int , 物理int)insert into tb values(张三,74,83,93)insert into tb values(李四,74,84,94)go-SQL SERVER 2000 静态SQL。select * from( select 姓名, 课程= 语文 , 分数= 语文from tb union all select 姓名, 课程= 数学 , 分数= 数学from tb union all select 姓名, 课程= 物理 , 分数= 物理from tb) torder by 姓名, case 课程when 语文 then 1 when 数学 then 2 when 物理 then 3 end-SQL SERVER 2000 动态SQL。-调用系统表动态生态。declare sql varchar(8000)select sql = isnull(sql + union all , ) + select 姓名, 课程 = + quotename(Name , ) + , 分数 = + quotename(Name) + from tbfrom syscolumns where name! = N姓名 and ID = object_id(tb) -表名tb,不包含列名为姓名的其它列order by colid ascexec(sql + order by 姓名)-SQL SERVER 2005 动态SQL。select 姓名, 课程, 分数from tb unpivot (分数for 课程in(语文 , 数学 , 物理) t-SQL SERVER 2005 动态SQL,同SQL SERVER 2000 动态SQL。-/*问题:在上述的结果上加个平均分,总分,得到如下结果:姓名课程 分数- - -李四语文 74.00李四数学 84.00李四物理 94.00李四平均分84.00李四总分 252.00张三语文 74.00张三数学 83.00张三物理 93.00张三平均分83.33张三总分 250.00-*/select * from( select 姓名as 姓名, 课程= 语文 , 分数= 语文from tb union all select 姓名as 姓名, 课程= 数学 , 分数= 数学from tb union all select 姓名as 姓名, 课程= 物理 , 分数= 物理from tb union all select 姓名as 姓名, 课程= 平均分 , 分数= cast(语文+ 数学+ 物理)*1.0/3 as decimal(18,2) from tb union all select 姓名a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社工证考试题库及答案
- 校园小超市安全知识培训课件
- 工会相关考试试题及答案
- 校车碰撞测试题及答案
- 用公务员面试题及答案
- 公共外交面试题及答案
- 减灾中心面试题及答案
- 校园现金测试题及答案
- 2025年国能铜陵发电有限公司招聘考试笔试试题(含答案)
- 2025年广元团市委下属事业单位招募人员考试笔试试题(含答案)
- 龙门吊警示教育
- 班主任培训:家校共育
- 《数据安全法》考试参考题库100题(含答案)
- 档案管理服务承诺书
- 胶原蛋白对皮肤的重要性
- 2025年绵阳燃气集团有限公司招聘笔试参考题库含答案解析
- 《石膏的护理》课件
- 护理法律相关案例分析
- 2025版《折弯机安全操作规程》全
- 孕期阴道炎的健康宣教
- DB32-T 4467-2023 南美白对虾小棚养殖尾水生态化处理技术规程
评论
0/150
提交评论