SQL 如何查询时竖着的数据横着显示
今天建表的时候遇到一些问题,百度了,也想了一些,总结一下。
- 姓名 科目 分数
王明 数学 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 如何查询时竖着的数据横着显示相关推荐
- java多对多关联数据操作,hibernate实施多对多关联查询时,关联表数据被删除
hibernate执行多对多关联查询时,关联表数据被删除 本帖最后由 binbb521 于 2012-12-04 11:48:29 编辑 S2SH框架开发的网站,执行两个多对多关系的表查询时,关联两个 ...
- SQL server查询时找不到表,显示:对象名 ‘XXX‘ 无效。
测试环境: SQLserver 2008 R2 用SQL查询语句时通常需要新建一个查询如下: 然后就会弹出个文件框: 在里面写入语句就可以进行查询了. 但是,明明我已经建立了学生表,执行的时候却不知道 ...
- sql语句查询时,where条件同时使用and和or
sql查询时,where条件后即有and和or,要使用括号将需要区分的括起来. where set_id = 11 and (year1 is null or year2 is null or yea ...
- sql嵌套查询时避免报错的方式
在做嵌套查询时,如果嵌套的条件在另一张表中没有数据,则会报错.这时候可以用: ifnull(max(xx),'') 来进行处理.字符串也可以比较大小. 下面是代码: CONCAT((SELECT IF ...
- Hibernate使用createSqlQuery进行模糊查询时找不到数据
1. 首先明确一点,使用createSqlQuery如下两种方式的占位符都可以使用,这个在官方的文档可以查到. 注意使用模糊查询时,赋值两边不可以添加单引号. Query query = sess.c ...
- 关于oracle sql语句查询时表名和字段名要加双引号的问题
oracle初学者一般会遇到这个问题. 用navicat可视化创建了表,可是就是不能查到! 后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引号就可以 ...
- 模糊查询时,页面没有数据,数据库编辑器里可以正常显示数据
目前遇到两种类似的情况: 1.查看数据库中的数据,比如:此时有两个表会议表和部门表,删除时,我们使用软删除(del),会议表里的3和4不是删除状态,而部门表里的3和4是删除状态,若两表联合查询加上查询 ...
- 如何在SQL分组查询时将空白值和NULL值分为一组
问题背景 出现这个问题的原因是在测试过程中,对于我要分组的类型在不同人存数据时出现了空白值和NULL两种情况(胡闹!),导致我之前的分组查询会出现NULL一个分组,空白值一个分组,由于业务上的需求是没 ...
- 关于oracle sql语句查询时表名和字段名要加双引号的问题详解
转自:http://www.2cto.com/database/201504/387184.html 作为oracle的初学者相信大家一定会遇到这个问题,如图: 明明就是navicat可视化创建了表, ...
最新文章
- HDU 5729 Rigid Frameworks(连通性DP)
- 汇编语言 第3版 王爽 检测点习题部分—答案及详细解析
- tf.io.gfile.glob 遍历文件
- JavaWeb图书管理系统day01
- c语言怎么让图形界面单独显示,「分享」C语言如何编写图形界面
- 番茄钟怎么调_学习神器-番茄钟
- android中的多媒体应用camera
- linux检查python安装情况,使用Python检测Linux服务器连接状态
- Kafka 安装部署、集群启动、命令行操作 与 可视化工具 Kafka Tool
- 想将有色彩的视频进行去色处理就这样做
- VScode SSH远程连接失败
- 转:详细图解,一眼就能看懂!卷帘快门(Rolling Shutter)与全局快门(Global Shutter)的区别
- 2023年计算机考研院校推荐50所
- 开源信息安全管理平台OSSIM入门-李晨光-专题视频课程
- 计算机专业ib选课,IB 课程里,总算发现一个貌似容易的学科了!
- Multisim基础 共阴极数码管是com_k,共阳极数码管是com_a
- 线性代数(numpy.linalg)
- UVALive 7456 Least Crucial Node
- 宏碁暗影骑士AN515-55/57/58原厂预装系统oem镜像
- 一维连续型随机变量函数的分布例题(一)