sql查询 竖排变横排及横排变竖排显示 行列转换问题
来源:互联网 发布:淘宝网店店名大全 编辑:程序博客网 时间:2024/04/29 13:12
假设有张学生成绩表(tb)如下:
Name Subject Result
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
-------------------------------------------------------------------------
想变成
姓名 语文 数学 物理
---------- ----------- ----------- -----------
李四 74 84 94
张三 74 83 93
create table tb
(
Name varchar2(10) ,
Subject varchar2(10) ,
Result number
);
insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
--静态SQL,指subject只有语文、数学、物理这三门课程。
select name 姓名,
(case subject when '语文' then result else 0 end) 语文,
(case subject when '数学' then result else 0 end) 数学,
(case subject when '物理' then result else 0 end) 物理
from tb
case的括号前可加数据统计函数,如max,sum等
max(case subject when '语文' then result else 0 end) 语文--语文最高分
sum(case subject when '语文' then result else 0 end) 语文--语文成绩之和(适合竖排有重复列的情况)
--动态SQL,指subject不止语文、数学、物理这三门课程。
create or replace procedure test as
declare @sql varchar2(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' from tb group by name'
exec(@sql);
加个平均分,总分
--静态SQL,指subject只有语文、数学、物理这三门课程。
select name 姓名,
max(case subject when '语文' then result else 0 end) 语文,
max(case subject when '数学' then result else 0 end) 数学,
max(case subject when '物理' then result else 0 end) 物理,
cast(avg(result*1.0) as decimal(18,2)) 平均分,
sum(result) 总分
from tb
group by name
--动态SQL,指subject不止语文、数学、物理这三门课程。
declare @sql1 varchar(8000)
set @sql1 = 'select Name as ' + '姓名'
select @sql1 = @sql1 + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql1 = @sql1 + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 总分 from tb group by name'
exec(@sql1)
drop table tb;
---------------------------------------------------------
--如果上述两表互相换一下:即横排变竖排
姓名 语文 数学 物理
张三 74 83 93
李四 74 84 94
想变成
Name Subject Result
---------- ------- -----------
李四 语文 74
李四 数学 84
李四 物理 94
张三 语文 74
张三 数学 83
张三 物理 93
create table tb1
(
姓名 varchar2(10) ,
语文 number ,
数学 number ,
物理 number
);
insert into tb1(姓名 , 语文 , 数学 , 物理) values('张三',74,83,93);
insert into tb1(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94);
select * from
(
select 姓名 as Name ,'语文' , 语文 from tb1
union all
select 姓名 as Name , '数学' ,数学 from tb1
union all
select 姓名 as Name , '物理' , 物理 from tb1
) t
order by name
drop table tb1;
以上在oralce 9i环境下编译通过。
- sql查询 竖排变横排及横排变竖排显示 行列转换问题
- sql查询 竖排变横排及横排变竖排显示 行列转换问题
- SQL 横排变竖排的问题
- 竖排显示变横排显示的方法
- SQL server 2005中竖排变横排显示
- [MSSQL]SQL server 2005中竖排变横排显示 收藏
- jacob word竖排文字变横排
- Android TextView 横排文字变竖排的简单方法
- [.NET] 将本文档中的文字横排变竖排后写到另一个本文
- dede友情链接竖排变为横排
- 竖排手风琴和横排手风琴
- 横排还是竖排?对Windows 8来说,这是个问题
- 工具栏 DialogBar的横排与竖排
- 用Java 设置的定位打印作业-横排或竖排
- java实现excel横排以及竖排数据导出
- 图片轮播jquery , 支持html5 , 滑动手势, 屏幕大小自适配 , 横排 竖排图片自适应, 竖排图片居中显示
- 横排
- TAB效果,五个,竖排横排,左右打开等等你想要的都有
- 常用正则表达式
- 谷歌出现“原因不明现象” 答案五花八门
- 在js中定义全局变量(IE,FireFox)
- 2009-07-09 TIPTOP
- JAVA6,请使用字符串加操作。
- sql查询 竖排变横排及横排变竖排显示 行列转换问题
- 世界网:互联网与物联网技术体系的终结?
- 就医难就医!三十多块钱,掏了次耳朵
- 今天遇到的几道java算法题
- Java学习笔记--数据库插入时如何得到插入列的自增长列值
- ognl.OgnlException: target is null for setProperty 异常处理
- 我写的程序还有
- PHP学习-完成简单的增删改
- 阶乘运算