oracle函数-pivot函数
create table ab(
姓名 varchar(10),
课程 varchar(10),
成绩类型 varchar2(10),
审核类型 varchar2(10),
分数 varchar2(10)
)
delete ab where 分数 = '47'
insert into ab values('张三','语文','补考','3','55');
insert into ab values('张三','语文','正考','3','54');
insert into ab values('张三','语文','重修','1','53');
insert into ab values('李四','语文','缓考','3','');
insert into ab values('王五','语文','免考','3','');
insert into ab values('刘六','语文','补考','3','');
insert into ab values('刘六','语文','正考','3','22');
select a.* from ab
pivot(SUM(分数) AS zcj, SUM(审核类型) AS shlx, MAX(成绩类型) AS lx FOR 成绩类型 IN('正考' AS sx, '补考' AS bk,'重修' AS cx , '免考' AS mk)) a
实际的效果:
按除了 分数 审核类型 成绩类型 这3个字段(用在pivot函数中的字段)的其他字段分组
其他函数必须为聚合函数:
分数 审核类型 成绩类型 (按成绩类型把 分数,审核类型(为值) 从行转成列)
补充(动态in):
方法1:
后台调取两次sql,先动态获取分组对象,再拼接sql再调取sql
如果要动态拼接in中的内容
比如:
String abc = ;
select listagg (cj, ',') WITHIN GROUP (ORDER BY cj) as cj from (
select ''''|| 成绩类型 ||''''|| ' AS ' || 成绩类型 as cj from ab group by 成绩类型
) a
在后台拼接sql后再调取,不能直接再in后面跟子句
String sql =
select a.* from ab
pivot(SUM(分数) AS zcj, SUM(审核类型) AS shlx, MAX(成绩类型) AS lx FOR 成绩类型
IN(“ + abc + ”)) a
方法2: 创建存储过程来调取
create or replace procedure p_test is
v_cjlx varchar2(2000);
v_sql varchar2(2000);
begin
select cj into v_cjlx from (
select listagg(cj, ',') WITHIN GROUP(ORDER BY cj) as cj
from (select '''' || 成绩类型 || '''' || ' AS ' || 成绩类型 as cj
from ab
group by 成绩类型) a
);
v_sql := 'select b.* from ab pivot(SUM(分数) AS zcj, SUM(审核类型) AS shlx, MAX(成绩类型) AS lx FOR 成绩类型 IN ('|| v_cjlx ||')) b ';
execute immediate v_sql;
dbms_output.put_line(v_sql);
end;
oracle函数-pivot函数相关推荐
- oracle 总转横函数,详解Oracle行列转换函数-pivot函数和unpivot函数-多智时代
今天主要介绍一下Oracle行转列及列转行常见函数,下面一起来看看吧! 行列转换 pivot函数:行转列函数 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)): ...
- Oracle 使用Pivot函数 实现行转列碰到的问题
pivot 行转列 pivot行转列的时候,报错某个参数标识符无效 问题解决方法:尝试将结果集放到一个临时表,再使用pivot函数. 问题描述: 下面的sql中,select已经查出结果集,但加上pi ...
- Oracle中pivot函数详解
[基本介绍] [格式]:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值)) [说明]:实现将指定字段的字段值转换为列的效果. [环境]:如下图是样例展示所使用的oracle ...
- oracle pivot 列转行,Oracle 列转行函数pivot
作为数据库应用开发人员,我们有很大的精力应付在处理各种各样的数据类型,展现各种维度的报表上面. [url=]行转列[/url].列转行是我们经常会遇到的"诡异"需求.标准SQL没有 ...
- oracle非常量不能用于privot_Oracle 行列转换函数pivot、unpivot的使用(二)
一.行转列pivot 关键函数pivot,其用法如下 pivot(聚合函数 for 列名 in(类型)) select * from table_name pivot(max(column_name) ...
- SQL 行转列 列转行 Oracle转置函数函数pivot、unpivot 解决wm_concat 没有排序
https://www.cnblogs.com/mellowsmile/p/4642306.html HH 终风且暴,顾我则笑,谑浪笑敖,中心是悼. 终风且霾,惠然肯来,莫往莫来,悠悠我思. 博客园 ...
- Oracle 行列转换函数pivot使用
问题描述: 描述:在项目中,需要将表中日期数据行,用视图转列显示月报表 解决方案: 注意:多聚合必须重命名. create table pivottest( 主键 varchar2(50) defau ...
- Oracle SQL 行转列,pivot函数和unpivot函数
转:Oracle行转列,pivot函数和unpivot函数 - waynelo - 博客园 (cnblogs.com) pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值 ...
- oracle列转行查询,Oracle列转行函数Listagg以及pivot查询示例
简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER) ...
最新文章
- Dubbo开源现状与未来规划
- docker 在容器外执行某个容器内的某个命令
- idea tomcat乱码_Tomcat新手常见问题
- SQL Server2008 表旋转(pivot)技术
- python 加密解密_python加密解密
- C#在Linux+Mono环境中使用微信支付证书
- 手动编译Spring4.2源码,以及把源码导入myEclipse中
- 戴尔optiplex3020主板接线_戴尔XPS 13 2020上手,12999元的高端精致怪,让苹果也很有压力!...
- 全局 快捷键_表格快捷键
- 2012年软件评测师真题精选
- Android 图片压缩详解
- python 饼图笔记 两个饼图 双饼图 复合饼图 两个饼图 环形图
- 「抖音同款播放器」上市:卡顿、黑屏和模糊,这些技术来解决
- 求职技巧:网投简历如何才能做到最抢眼
- linux游戏掌机,一起来猎奇:窄众平板/游戏掌机推荐
- SqlServer根据时段统计数据
- 安装rpm 树莓派4_树莓派3上安装使用centos 7.4
- 幽默感七个技巧_如何提高幽默感
- 英特尔会是下一个诺基亚吗?
- 优思学院:DMAIC六西格玛改进模型
热门文章
- GIMP 2.10 图像处理脚本推荐
- 搭建服务器(保姆级教程)
- Linux 创建文件系统及挂载文件系统流程详解(转)
- QLExpress使用问题
- [c/c++] memory ordering
- 制作简单的div盒子
- 三国杀军争java_三国杀军争这八个武将上场就能赢,不管你是什么身份只要选他们!...
- Python 自动化-pywinauto库print_control_identifiers()方法打印内容显示不全解决办法,cmd展示更多内容设置方法
- ABAP使用AMDP调用HANA存储过程
- 遇见未来 | 对话叶毓睿:人类文明运行在软件之上