oracle 行转列
2013-07-13 00:13
232 查看
oracle 行转列
把如下表格结构
张三 语文
100
张三 数学
100
张三 物理
90
李四 语文
80
李四 数学
85
李四 物理
96
转换成
name 语文 数学 物理
李四 80
85 96
张三 100
100 90
1、创建表格并插入数据
create table STUDENTS01
(
NAME01 VARCHAR2(10),
COURSE VARCHAR2(10),
SCORE NUMBER(5,1)
)
备注:VARCHAR2 和 NVARCHAR2的区别 NVARCHAR2和字符集有关,NVARCHAR2(10)可以存10个汉字;VARCHAR2 (10) 可以存5个汉字。
插入数据的sql 省略
方法一,用case实现
第一步:
select name01,
(case course when '语文' then score end) 语文,
(case course when '数学' then score end) 数学,
(case course when '物理' then score end) 物理
from students01
结果:
name 语文 数学 物理
1 张三
100
2 张三 100
3 张三 90
4 李四 80
5 李四 85
6 李四 96
第二步 根据名字求和:
select name01,
sum(case course when '语文' then score end) 语文,
sum(case course when '数学' then score end) 数学,
sum(case course when '物理' then score end) 物理
from students01
group by name01
结果:
name 语文 数学 物理
1 李四
80 85 96
2 张三 100
100 90
第三步 处理 NULL(假如张三的物理为NULL):
select name01,
nvl(sum(case course when '语文' then score end),0) 语文,
nvl(sum(case course when '数学' then score end),0) 数学,
nvl(sum(case course when '物理' then score end),0) 物理
from students01
group by name01
备注:NVL( string1, replace_with) 替换函数, replace_with 替换string1。
注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数进行类型转换
把如下表格结构
张三 语文
100
张三 数学
100
张三 物理
90
李四 语文
80
李四 数学
85
李四 物理
96
转换成
name 语文 数学 物理
李四 80
85 96
张三 100
100 90
1、创建表格并插入数据
create table STUDENTS01
(
NAME01 VARCHAR2(10),
COURSE VARCHAR2(10),
SCORE NUMBER(5,1)
)
备注:VARCHAR2 和 NVARCHAR2的区别 NVARCHAR2和字符集有关,NVARCHAR2(10)可以存10个汉字;VARCHAR2 (10) 可以存5个汉字。
插入数据的sql 省略
方法一,用case实现
第一步:
select name01,
(case course when '语文' then score end) 语文,
(case course when '数学' then score end) 数学,
(case course when '物理' then score end) 物理
from students01
结果:
name 语文 数学 物理
1 张三
100
2 张三 100
3 张三 90
4 李四 80
5 李四 85
6 李四 96
第二步 根据名字求和:
select name01,
sum(case course when '语文' then score end) 语文,
sum(case course when '数学' then score end) 数学,
sum(case course when '物理' then score end) 物理
from students01
group by name01
结果:
name 语文 数学 物理
1 李四
80 85 96
2 张三 100
100 90
第三步 处理 NULL(假如张三的物理为NULL):
select name01,
nvl(sum(case course when '语文' then score end),0) 语文,
nvl(sum(case course when '数学' then score end),0) 数学,
nvl(sum(case course when '物理' then score end),0) 物理
from students01
group by name01
备注:NVL( string1, replace_with) 替换函数, replace_with 替换string1。
注意事项:string1和replace_with必须为同一数据类型,除非显式的使用TO_CHAR函数进行类型转换
相关文章推荐
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- Oracle 10g R2不能使用EM的问题
- PreparedStatement中in子句的处理
- mysql数据行转列
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- 解决oracle用户连接失败的解决方法
- oracle的一些tips技巧
- Oracle 下的开发日积月累
- Oracle存储过程之数据库中获取数据实例
- Windows下ORACLE 10g完全卸载的方法分析
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ORACLE LATERAL-SQL-INJECTION 个人见解
- Oracle Connect to Idle Instance解决方法
- oracle sys_connect_by_path 函数 结果集连接
- Oracle捕获问题SQL解决CPU过渡消耗
- oracle dba 应该熟悉的命令
- Oracle11.2 命令行手工最简创建数据库的过程
- Oracle 数据库自动存储管理-安装配置
- 基于oracle中锁的深入理解
- Oracle 数据库 临时数据的处理方法