sql查询行转列

--SQL 面试题

/* 问题:假设有张学生成绩表(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 tb group by 姓名 go --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 a set @sql = @sql + ' from tb group by 姓名' exec(@sql) go --SQL SERVER 2005 静态SQL。 select * from (select * from tb) a pivot (max(分数) for 课程 in (语文,数学,物理)) b go --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') go

 

---------------------------------

/*
问题:在上述结果的基础上加平均分,总分,得到如下结果:
姓名 语文 数学 物理 平均分 总分
---- ---- ---- ---- ------ ----
李四 74   84   94   84.00 252
张三 74   83   93   83.33 250
*/

 

 

转载于:https://www.cnblogs.com/wjbobo/archive/2012/06/09/SQL.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379621.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法---数

数1 最大公约数2 最小公约数3 进制转换4 阶乘统计阶乘尾部0的个数5 字符串加法减法二进制加法6 多数投票问题数组中出现次数多于n/2的元素7 相遇问题改变数组元素使所有元素都相同1 最大公约数 欧几里得算法:两个整数的最大公约数等于其中较小的那个数和两数相除余…

Java ByteArrayOutputStream reset()方法及示例

ByteArrayOutputStream类reset()方法 (ByteArrayOutputStream Class reset() method) reset() method is available in java.io package. reset()方法在java.io包中可用。 reset() method is used to reset this stream (i.e. it removes all currently consumed output in thi…

使用存储过程修改sql server 2005 用户密码

exec sp_password null,新密码,用户名转载于:https://www.cnblogs.com/SXLBlog/archive/2009/07/10/1520590.html

winform TopMost

当设置winform窗体的TopMost属性为true时,有时会出现不好使的状况,这可能是因为窗体设置了MdiParent属性。转载于:https://www.cnblogs.com/magic-cube/archive/2012/06/10/2544216.html

Linux内核设计与实现---进程地址空间

进程地址空间1 内存描述符分配内存描述符销毁内存描述符mm_struct与内核线程2 内存区域VMA标志VMA操作内存区域的树形结构和内存区域的链表结构3 操作内存区域find_vma()find_vma_prev()find_vma_intersection()4 mmap()和do_mmap():创建地址空间mmap(&a…

JavaScript中带有示例的Math.log10()方法

JavaScript | Math.log10()方法 (JavaScript | Math.log10() Method) Math operations in JavaScript are handled using functions of math library in JavaScript. In this tutorial on Math.log10() method, we will learn about the log10() method and its working with e…

JSP技术

一、jsp脚本和注释 jsp脚本&#xff1a; 1&#xff09;<%java代码%> ----- 内部的java代码翻译到service方法的内部 2&#xff09;<%java变量或表达式> ----- 会被翻译成service方法内部out.print() 3&#xff09;<%!java代码%> ---- 会被翻译成servlet的成…

jQuery.ajax不能实现return值调用问题

我们使用jQuery.ajax函数是不能实现success方法return值的&#xff0c;而有时候我们需要对成功返回的数据进行处理&#xff0c;一般来说&#xff0c;与服务器交互后会返回很多的数据&#xff0c;而有些数据需要进行特别处理&#xff0c;这时需要实现success方法return&#xff…

Linux内核设计与实现---页高速缓存和页回写

页高速缓存和页回写1 页高速缓存2 基树3 缓冲区高速缓存4 pdflush后台例程膝上型电脑模式bdflush和kupdated避免拥塞的方法&#xff1a;使用多线程页高速缓存&#xff08;cache&#xff09;是Linux内核实现的一种主要磁盘缓存&#xff0c;通过把磁盘中的数据缓存到物理内存中&a…

EL技术

1&#xff0e;EL 表达式概述 EL&#xff08;Express Lanuage&#xff09;表达式可以嵌入在jsp页面内部&#xff0c;减少jsp脚本的编写&#xff0c;EL 出现的目的是要替代jsp页面中脚本的编写。 2&#xff0e;EL从域中取出数据(EL最重要的作用) jsp脚本&#xff1a;<%requ…

math.trunc_JavaScript中带有示例的Math.trunc()方法

math.truncJavaScript | Math.trunc()方法 (JavaScript | Math.trunc() Method) Math.trunc() is a function in math library of JavaScript that is used to extract the integer part of the given floating-point number. It removes the decimal and all the digits after…

.NET程序员的书单

zz from sjtu bbs: http://bbs.sjtu.edu.cn/bbscon?boardDotNET&fileM.1126188158.A 发信人: luckySeven(lucky为这位mm默哀), 信区: DotNET 标 题: .NET程序员的书单 发信站: 饮水思源 (2005年09月08日22:02:45 星期四), 转信 发信人: AtomAndBit (原子与比特), 信区: D…

SVN+AnkhSVN端配置

对于ankhSVN我想很多人不陌生&#xff0c;因为经常使用&#xff0c;但是我还是发现很多人并不怎么会配置&#xff0c;或者完全不知道其需要配置&#xff0c;如果不配置的话&#xff0c;当两个人同时需要修改某个文件的时候就容易中弹了。SVN默认是不支持“锁定-编辑-解锁”的&a…

Linux内核设计与实现---模块

模块1 构建模块放在内核源代码树中放在内核代码外2 安装模块3 产生模块依赖性4 载入模块5 管理配置选项6 模块参数7 导出符号表Linux内核是模块化组成的&#xff0c;它允许内核在运行时动态地向其中插入或从中删除代码。 与开发的内核核心子系统不同&#xff0c;模块开发更接近…

JSTL技术

1&#xff0e;JSTL概述 JSTL&#xff08;JSP Standard Tag Library)&#xff0c;JSP标准标签库&#xff0c;可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能。jstl出现的目的同el一样也是要代替jsp页面中的脚本代码。JSTL标准标准标签库有5个子库&#xff0c;但随着发展…

asinh函数_JavaScript中带有示例的Math.asinh()方法

asinh函数JavaScript | Math.asinh()方法 (JavaScript | Math.asinh() Method) Math.asinh() is a function in math library of JavaScript that is used to find the value of hyperbolic arc-sine of a number. Math.asinh()是JavaScript数学库中的函数&#xff0c;用于查找…

使用PHP创建一个REST API(Create a REST API with PHP)

译者前言&#xff1a; 首先这是一篇国外的英文文章&#xff0c;非常系统、详尽的介绍了如何使用PHP创建REST API&#xff0c;国内这方面的资料非常非常的有限&#xff0c;而且基本没有可操作性。这篇文章写的非常好&#xff0c;只要对PHP稍有了解的程序员&#xff0c;看完本文基…

old-

大数问题:求用一段C或C程序写求 f(x)100! 的完整程序大数问题&#xff0c; 我用数组作的&#xff0c;输出格式应该是是222,222,222 #include "stdafx.h" #include<stdio.h> #include<stdlib.h> int a[1000]{0}; in…

javaEE的开发模式

1&#xff0e;什么是模式 模式在开发过程中总结出的“套路”&#xff0c;总结出的一套约定俗成的设计模式 2&#xff0e;javaEE经历的模式 model1模式&#xff1a; 技术组成&#xff1a;jspjavaBean model1的弊端&#xff1a;随着业务复杂性 导致jsp页面比较混乱 model2模式…

Linux内核设计与实现---kobject sysfs

kobject sysfs1 kobject2 ktype3 kset4 subsystem5 别混淆了这些结构体6 管理和操作kobject7 引用计数kref8 sysfssysfs中添加和删除kobject向sysfs添加文件9 内核事件层2.6内核增加了一个引人注目的新特性—同一设备模型。设备模型提供了独立的机制专门表示设备&#xff0c;并…