oracle SQL竖表转横表
2013-11-03 10:35
387 查看
oracle SQL 实现竖表转横表
T_T_STUDENT表查询记录如下,要转成横表
姓名 课程 成绩
1 张飞 语文 80
2 张飞 数学 87
3 关羽 语文 97
4 张飞 英语 68
5 关羽 数学 53
6 刘备 语文 90
方法一:
--用decode实现,
SELECT T.NAME,
SUM(DECODE(T.Course, '语文', T.Score)) 语文,
SUM(DECODE(T.Course, '数学', T.Score)) 数学,
SUM(DECODE(T.Course, '英语', T.Score)) 英语
FROM T_T_STUDENT T
GROUP BY T.NAME
方法二:
--用case when 实现
SELECT T.NAME,
SUM(CASE T.Course WHEN '语文' THEN T.Score ELSE 0 END) 语文,
SUM(CASE T.Course WHEN '数学' THEN T.Score ELSE 0 END) 数学,
SUM(CASE T.Course WHEN '英语' THEN T.Score ELSE 0 END) 英语
FROM T_T_STUDENT T
GROUP BY T.NAME
输出结果如下:
姓名 语文 数学 英语
1 刘备 90 94 92
2 关羽 97 53 95
3 张飞 80 87 68
区别如果条件是单一值时,用decode比较简便,如果判断条件比较复杂是用case when实现
T_T_STUDENT表查询记录如下,要转成横表
姓名 课程 成绩
1 张飞 语文 80
2 张飞 数学 87
3 关羽 语文 97
4 张飞 英语 68
5 关羽 数学 53
6 刘备 语文 90
方法一:
--用decode实现,
SELECT T.NAME,
SUM(DECODE(T.Course, '语文', T.Score)) 语文,
SUM(DECODE(T.Course, '数学', T.Score)) 数学,
SUM(DECODE(T.Course, '英语', T.Score)) 英语
FROM T_T_STUDENT T
GROUP BY T.NAME
方法二:
--用case when 实现
SELECT T.NAME,
SUM(CASE T.Course WHEN '语文' THEN T.Score ELSE 0 END) 语文,
SUM(CASE T.Course WHEN '数学' THEN T.Score ELSE 0 END) 数学,
SUM(CASE T.Course WHEN '英语' THEN T.Score ELSE 0 END) 英语
FROM T_T_STUDENT T
GROUP BY T.NAME
输出结果如下:
姓名 语文 数学 英语
1 刘备 90 94 92
2 关羽 97 53 95
3 张飞 80 87 68
区别如果条件是单一值时,用decode比较简便,如果判断条件比较复杂是用case when实现
相关文章推荐
- perl连接oracle,DBI,DBD,Data-ShowTable安装
- Oracle数据库实例启动关闭详细过程
- Oracle隐式数据类型转换对索引的影响
- Oracle性能问题sql调优脚本集
- Oracle——Default pool 之cache特性 以及 测试default pool使用效果实验分享
- Oracle - SGA → data_buffer_cache
- oracle数据库核心笔记
- oracle监听配置讲解
- 探索Oracle之ASM
- ORACLE单行函数与多行函数之七:多行函数之分组函数示例
- Oracle数据的导入导出
- Oracle - SGA 结构
- Oracle-sga → large_pool , jave_pool , streams_buffer , redo_log_buffer
- ORACLE单行函数与多行函数之六:通用函数示例
- Oracle-SGA → sga_target and sga_max_size
- Oracle性能问题sql调优脚本集
- oracle 11g ASM 的管理用户 asm shutdown immediate ORA-01031: insufficient privileges
- oracle 安装显示问题解决
- oracle中去重复记录 不用distinct .
- ORACLE单行函数与多行函数之五:转换函数示例