oracle 纵列 转 横列,oracle sql小结(主要讲横列转换的例子)decode 以及case
--建表
create table kecheng
(
id NUMBER,
name VARCHAR2(20),
course VARCHAR2(20),
score NUMBER
);
--插入数据
insert into kecheng (id, name, course, score)
values (1, '张三', '语文', 67);
insert into kecheng (id, name, course, score)
values (1, '张三', '数学', 76);
insert into kecheng (id, name, course, score)
values (1, '张三', '英语', 43);
insert into kecheng (id, name, course, score)
values (1, '张三', '历史', 56);
insert into kecheng (id, name, course, score)
values (1, '张三', '化学', 11);
insert into kecheng (id, name, course, score)
values (2, '李四', '语文', 54);
insert into kecheng (id, name, course, score)
values (2, '李四', '数学', 81);
insert into kecheng (id, name, course, score)
values (2, '李四', '英语', 64);
insert into kecheng (id, name, course, score)
values (2, '李四', '历史', 93);
insert into kecheng (id, name, course, score)
values (2, '李四', '化学', 27);
insert into kecheng (id, name, course, score)
values (3, '王五', '语文', 24);
insert into kecheng (id, name, course, score)
values (3, '王五', '数学', 25);
insert into kecheng (id, name, course, score)
values (3, '王五', '英语', 8);
insert into kecheng (id, name, course, score)
values (3, '王五', '历史', 45);
insert into kecheng (id, name, course, score)
values (3, '王五', '化学', 1);
commit;
select * from KECHENG t;
--2.1、Decode方式
SELECT ID,NAME,
SUM(DECODE(course,'语文',score,0)) 语文,
SUM(DECODE(course,'数学',score,0)) 数学,
SUM(DECODE(course,'英语',score,0)) 英语,
SUM(DECODE(course,'历史',score,0)) 历史,
SUM(DECODE(course,'化学',score,0)) 化学,
sum(decode(course,'地理',score,0)) 地理,
sum(score) 总分
FROM kecheng
GROUP BY ID ,NAME
--2.2、Case方式
--这里使用max也可以,但是使用min和avg就不行了
SELECT ID,NAME,
MAX(CASE WHEN course='语文' THEN score ELSE 0 END) 语文,
MAX(CASE WHEN course='数学' THEN score ELSE 0 END) 数学,
MAX(CASE WHEN course='英语' THEN score ELSE 0 END) 英语,
MAX(CASE WHEN course='历史' THEN score ELSE 0 END) 历史,
MAX(CASE WHEN course='化学' THEN score ELSE 0 END) 化学,
max(case when course='' then score else 0 end ) 无课 ,
sum(score) 总分
FROM kecheng
GROUP BY ID ,NAME
--结果与上方一样
--2.3、wmsys.wm_concat行列转换函数(该函数只能在group by语句里)
SELECT ID,NAME,
wmsys.wm_concat(course || ':'||score) course
FROM kecheng
GROUP BY ID ,NAME;
--2.4、使用over(partition by t.u_id)用法
SELECT NAME, max(r) from (
SELECT name,wmsys.wm_concat(course ||score) OVER (PARTITION BY NAME order by course) r
FROM kecheng
) group by name
---三、动态转换
DECLARE
--存放最终的SQL
LV_SQL VARCHAR2(3000);
--存放连接的SQL
SQL_COMMOND VARCHAR2(3000);
--定义游标
CURSOR CUR IS
SELECT COURSE FROM KECHENG GROUP BY COURSE;
BEGIN
--定义查询开头
SQL_COMMOND := 'SELECT NAME ';
FOR I IN CUR LOOP
--将结果相连接
SQL_COMMOND := SQL_COMMOND || ' ,SUM(DECODE(course,''' || I.COURSE ||
''',score,0)) ' || I.COURSE;
DBMS_OUTPUT.PUT_LINE(SQL_COMMOND);
END LOOP;
SQL_COMMOND := SQL_COMMOND || ' from KECHENG group by name';
--LV_SQL := 'INSERT INTO temp_ss ' || SQL_COMMOND;
--DBMS_OUTPUT.PUT_LINE(LV_SQL);
-- EXECUTE IMMEDIATE LV_SQL;
END;
oracle sql小结(主要讲横列转换的例子)group by以及wmsys.wm_concat()的使用
---计算九月每个电厂的数量select f_dcname,count(f_dcname) as 九月份的数量 from W_EC_PLACESTATION_COLLECT twhere f_coll ...
Oracle sql 查询结果某一列字段合并成为一条数据
使用oracle中自带函数 wmsys.wm_concat(需合并列的字段名) 用法如下: select code,name,wmsys.wm_concat(baname) from tab gro ...
SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句
原文出处:http://www.cnblogs.com/wy123/p/5933734.html 先看常用的一种表结构设计方式: 那么可能会遇到一种典型的查询方式,主子表关联,查询子表中的某些(或者全 ...
Oracle sql语句中不支持boolean类型(decode&;case)
[转自] http://blog.csdn.net/t0nsha/article/details/7828538 Oracle sql语句中不支持boolean类型(decode&case) ...
(转载)SQL语句,纵列转横列
SQL语句,纵列转横列 Feed: 大富翁笔记 Title: SQL语句,纵列转横列 Author: wzmbox Comments sTable.db库位 货物编号 库存数1 0101 501 01 ...
Oracle sql 中的字符(串)替换与转换[转载]
1.REPLACE 语法:REPLACE(char, search_string,replacement_string) 用法:将char中的字符串search_string全部转换为字符串repla ...
fixed Oracle SQL报错 #ORA-01460: 转换请求无法实施或不合理
最近遇到一个oracle错误,之前并没有遇到过,并不是select in超过1000个导致的,通过网上资料说是oracle版本导致,也有的说是oracle SQL过长导致. 然后通过自己实践应该说是o ...
【总结】Oracle sql 中的字符(串)替换与转换
1.REPLACE 语法:REPLACE(char, search_string,replacement_string) 用法:将char中的字符串search_string全部转换为字符串repla ...
随机推荐
自己做了一个json格式化工具,亲测可以使用
随笔背景:在向后台请求数据之后,我们常常会拿到一串json格式.此时,为了方便查看key-value,程序猿们常常使用一些在线json格式化工具或者是类似于notepadd++这样的工具进行转换.今天 ...
Java Hour 60 逃不开的GC
第一个大家都应该知道的概念就是应用程序中不断的new 分配了内存,却没有显式的代码去清理内存,而执行这个清理过程的自动垃圾回收的过程就叫做GC. 但是,JVM 说明并没有要求一定要有GC,JVM 说明 ...
javascript加载顺序
javascript加载顺序
iOS开发:icon和启动图尺寸
歪果仁的总结: Asset iPhone 6s Plus and iPhone 6 Plus (@3x) iPhone 6s, iPhone 6, and iPhone 5 (@2x) iPhone ...
linux 脚本编写基础(一)
1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在 ...
个人对【依赖倒置(DIP)】、【控制反转(IOC)】、【依赖注入(DI)】浅显理解
一.依赖倒置(Dependency Inversion Principle) 依赖倒置是面向对象设计领域的一种软件设计原则.(其他的设计原则还有:单一职责原则.开放封闭原则.里式替换原则.接口分离原则 ...
nginx,hello World!
向nginx中添加第一个最简单的hello world模块 一.编写ngx_http_mytest_module模块 1. ngx_http_mytest_module.c #include < ...
python之打印日志logging
import logging # 简单打印日志举例 logging.basicConfig(level=logging.DEBUG) # 设置日志级别,WARN logging.warning('Wa ...
BTrace使用简介
很多时候在online的应用出现问题时,很多时候我们需要知道更多的程序的运行细节,但又不可能在开发的时候就把程序中所有的运行细节都打印到日志上,通常这个时候能采取的就是修改代码,重新部署,然后再观察, ...
JavaScript Window Screen 用户屏幕的信息
window.screen 对象包含有关用户屏幕的信息. Window Screen window.screen 对象在编写时可以不使用 window 这个前缀. 一些属性: screen.avail ...
oracle 纵列 转 横列,oracle sql小结(主要讲横列转换的例子)decode 以及case相关推荐
- mysql行列转换_Excel、SQL、Python分别实现行列转换
目录: Excel Excel 实现行转列 Excel 实现列转行 Python Python 实现行转列 Python 实现列转行 SQL MySQL 实现行转列 MySQL 实现列转行 一.Exc ...
- oracle sql列转行_ORACLE 列转行和行转列的SQL和函数
本文介绍两种行.列转换方法,一种是常规的SQL,一种是ORACLE 11G提供的函数.下面使用一个小例子对这两种方法进行说明. ---------------------------------原始表 ...
- 多列转多行sql oracle,sql多行转多列,中文没办法聚集的有关问题
sql多行转多列,中文没办法聚集的问题? 我要将下表 选项 答案 姓名 爱好 篮球 bruce 年龄 28 bruce 性别 ...
- oracle一个表更新另一个表多列,oracle sql更新表中多列值,值是从其它表中查询(select)得出...
案例描述:sql 将表vehicle中列pay_money_remain的值分为2/3,1/3再更新到表vehicle的pay_money_remain,disinfectionbal_remains ...
- oracle 查询语句取别名,实用sql查询语句详解1:给列取别名、查询部分行、多列排序...
SQL(Structured Query Language)是用于访问和处理数据库的标准计算机语言,是所有数据库查询的语言,无论是高级查询还是低级查询, 文章介绍了包括查询全部的行和列.给列取别名.查 ...
- oracle 列转行sql函数
1.列转行 列拼接 wm_concat() --11g listagg() within group() 列转行汇总数据 decode() --用decode实现行转列 --适用范围:8i,9i,10 ...
- oracle之数据同步:Oracle Sql Loader使用说明(大批量快速插入数据库记录)
1.准备表数据 select * from emp10;create sequence seq_eseq increment by 1 start with 1001 maxvalue 9999999 ...
- 下列那些是oracle的伪列,oracle伪列
在对表进行查询时,我们可以对oracle提供的一系列伪列(pseudocolumns)进行查询,这些伪列不存储在表中,oracle不允许对伪列进行dml操作. 在oracle 10g和11g下,伪列包 ...
- PostgreSQL Oracle 兼容性之 - INDEX SKIP SCAN (递归查询变态优化) 非驱动列索引扫描优化...
标签 PostgreSQL , Oracle , index skip scan , 非驱动列条件 , 递归查询 , 子树 背景 对于输入条件在复合索引中为非驱动列的,如何高效的利用索引扫描? 在Or ...
最新文章
- Java异常处理12条军规
- 阿里无人车配送快递突破 100 万单,小蛮驴牵引的自动驾驶战略布局
- 5分钟,带你领略项目经理十年的功力
- 博导眼里本科生的科研能力:“他们还在玩泥巴”
- Java多对多关系示例
- java的异常处理块的形式_Java 异常处理详细解读
- php商品评价代码,php商品对比功能代码分享
- linux的shell类型_Linux中有哪些不同类型的Shell?
- 3、用一个div模拟textarea的实现
- 沙盒生存游戏:打造世界Craft the World Mac中文版
- 我写了一本操作系统词典送你了
- 翠竹林 Java 实现对Sql语句解析
- 使用Resnet网络对人脸图像分类识别出男女性别(包含数据集制作+训练+测试)
- C/S - Exploits 学习笔记
- 红黑树(算法导论版)
- Java课程设计说明书 捕鱼达人
- FFmpeg 工具:音视频开发都用它,快@你兄弟来看丨音视频工具
- 1个人做自媒体,就选这4个领域,变现容易,操作简单
- 常用IP相关命令查询
- Phaser3 + MatterJs 实现伪3D推金币
热门文章
- Failed to convert value of type 'java.lang.String' to required type 'java.util.Date
- div rot grad
- 未明学院数据分析报告:金融专业如何找实习?数据分析告诉你整个金融实习市场全貌!
- 如何快速学会三子棋游戏
- 为什么有的域名需要加WWW才能访问?
- 人脸识别、深度学习优秀设计(毕业专业指导)
- php tp5生成条形码,thinkphp5 + barcode 生成条形码的方法
- 原腾讯QQ空间负责人,T13专家,黄希彤被爆近期被裁员,裁员原因令人唏嘘。。...
- 爬虫前行中(datawhale task2)
- 浅析加密算法五【DES密码】