今天建表的时候遇到一些问题,百度了,也想了一些,总结一下。

  • 姓名 科目 分数
    王明 数学 100
    王明 语文 100
    王明 英语 100

显示成

姓名 数学 语文 英语
王明 100 100 100

select * from sysobjects where [xtype]='u'
go  if exists(select id from sysobjects where name='studentscore')
drop table studentscore--删除与实验冲突的表
go
create table studentscore--创建实验表
(
[id] int identity(1,1),
[name] nvarchar(20) not null,
subject nvarchar(20) not null,
score int not null
)
go  select * from studentscore
go  --添加实验数据
insert studentscore values ('张三','语文','60');
insert studentscore values ('张三','数学','65');
insert studentscore values ('张三','外语','70');
insert studentscore values ('李四','语文','80');
insert studentscore values ('李四','数学','90');
insert studentscore values ('李四','外语','85');
insert studentscore values ('王五','语文','70');
insert studentscore values ('王五','数学','71');
insert studentscore values ('王五','外语','75');
insert studentscore values ('赵六','语文','64');
insert studentscore values ('赵六','数学','67');
insert studentscore values ('赵六','外语','76');
go
select * from studentscore
go  我们先利用case when then else end 语句将行转为列:  select [name],语文=case when subject='语文' then score else 0 end from studentscore group by [name],subject,score  这里为了好理解只取一列,得到下面的结果  有了语文成绩行专列的例子后,我们很容易将其他两列也添加进来,  select [name],
语文=case
when subject='语文' then score else 0
end,
数学=case
when subject='数学' then score else 0
end,
外语=case
when subject='外语' then score else 0
end
from studentscore
group by [name],subject,score  下面是查询后的结果:  现在只要把name相同的行合并到一起就ok了,  select [name],
语文=max(case
when subject='语文' then score else 0
end),
数学=max(case
when subject='数学' then score else 0
end),
外语=max(case
when subject='外语' then score else 0
end)
from studentscore
group by [name]  好了,看看结果吧.  上面是列数可枚举时的代码,很多情况下到底有多少列是动态的或者不可知的.  这个时候需要拼下SQL语句了.  declare @sql varchar(8000)  set @sql = 'select [name],'
select @sql = @sql + 'sum(case subject when '''+subject+'''
then score else 0 end) as '''+subject+''','
from (select distinct subject from studentscore) as a
select @sql = left(@sql,len(@sql)-1) + ' from studentscore group by [name]'
exec(@sql)  

SQL 如何查询时竖着的数据横着显示相关推荐

  1. java多对多关联数据操作,hibernate实施多对多关联查询时,关联表数据被删除

    hibernate执行多对多关联查询时,关联表数据被删除 本帖最后由 binbb521 于 2012-12-04 11:48:29 编辑 S2SH框架开发的网站,执行两个多对多关系的表查询时,关联两个 ...

  2. SQL server查询时找不到表,显示:对象名 ‘XXX‘ 无效。

    测试环境: SQLserver 2008 R2 用SQL查询语句时通常需要新建一个查询如下: 然后就会弹出个文件框: 在里面写入语句就可以进行查询了. 但是,明明我已经建立了学生表,执行的时候却不知道 ...

  3. sql语句查询时,where条件同时使用and和or

    sql查询时,where条件后即有and和or,要使用括号将需要区分的括起来. where set_id = 11 and (year1 is null or year2 is null or yea ...

  4. sql嵌套查询时避免报错的方式

    在做嵌套查询时,如果嵌套的条件在另一张表中没有数据,则会报错.这时候可以用: ifnull(max(xx),'') 来进行处理.字符串也可以比较大小. 下面是代码: CONCAT((SELECT IF ...

  5. Hibernate使用createSqlQuery进行模糊查询时找不到数据

    1. 首先明确一点,使用createSqlQuery如下两种方式的占位符都可以使用,这个在官方的文档可以查到. 注意使用模糊查询时,赋值两边不可以添加单引号. Query query = sess.c ...

  6. 关于oracle sql语句查询时表名和字段名要加双引号的问题

    oracle初学者一般会遇到这个问题. 用navicat可视化创建了表,可是就是不能查到! 后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引号就可以 ...

  7. 模糊查询时,页面没有数据,数据库编辑器里可以正常显示数据

    目前遇到两种类似的情况: 1.查看数据库中的数据,比如:此时有两个表会议表和部门表,删除时,我们使用软删除(del),会议表里的3和4不是删除状态,而部门表里的3和4是删除状态,若两表联合查询加上查询 ...

  8. 如何在SQL分组查询时将空白值和NULL值分为一组

    问题背景 出现这个问题的原因是在测试过程中,对于我要分组的类型在不同人存数据时出现了空白值和NULL两种情况(胡闹!),导致我之前的分组查询会出现NULL一个分组,空白值一个分组,由于业务上的需求是没 ...

  9. 关于oracle sql语句查询时表名和字段名要加双引号的问题详解

    转自:http://www.2cto.com/database/201504/387184.html 作为oracle的初学者相信大家一定会遇到这个问题,如图: 明明就是navicat可视化创建了表, ...

最新文章

  1. HDU 5729 Rigid Frameworks(连通性DP)
  2. 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析
  3. tf.io.gfile.glob 遍历文件
  4. JavaWeb图书管理系统day01
  5. c语言怎么让图形界面单独显示,「分享」C语言如何编写图形界面
  6. 番茄钟怎么调_学习神器-番茄钟
  7. android中的多媒体应用camera
  8. linux检查python安装情况,使用Python检测Linux服务器连接状态
  9. Kafka 安装部署、集群启动、命令行操作 与 可视化工具 Kafka Tool
  10. 想将有色彩的视频进行去色处理就这样做
  11. VScode SSH远程连接失败
  12. 转:详细图解,一眼就能看懂!卷帘快门(Rolling Shutter)与全局快门(Global Shutter)的区别
  13. 2023年计算机考研院校推荐50所
  14. 开源信息安全管理平台OSSIM入门-李晨光-专题视频课程
  15. 计算机专业ib选课,IB 课程里,总算发现一个貌似容易的学科了!
  16. Multisim基础 共阴极数码管是com_k,共阳极数码管是com_a
  17. 线性代数(numpy.linalg)
  18. UVALive 7456 Least Crucial Node
  19. 宏碁暗影骑士AN515-55/57/58原厂预装系统oem镜像
  20. 一维连续型随机变量函数的分布例题(一)

热门文章

  1. 利用西瓜播放器(xgplayer)实现直播点播
  2. vscode 下载慢解决方法
  3. 云计算openstack——云计算、大数据、人工智能(16)
  4. 【运行报错】Centos 6 无法使用 yum
  5. 推荐系统之用户多兴趣建模(一)
  6. Charles工具使用教程,以及注意事项。
  7. html自动全屏js,js实现简单页面全屏
  8. 中国人保为正华消防承保产品责任险,为消费者保驾护航!
  9. 【spring 的 init and destory 方法】
  10. 用Origin找两曲线的交点