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函数相关推荐

  1. oracle 总转横函数,详解Oracle行列转换函数-pivot函数和unpivot函数-多智时代

    今天主要介绍一下Oracle行转列及列转行常见函数,下面一起来看看吧! 行列转换 pivot函数:行转列函数 语法:pivot(任一聚合函数 for 需专列的值所在列名 in (需转为列名的值)): ...

  2. Oracle 使用Pivot函数 实现行转列碰到的问题

    pivot 行转列 pivot行转列的时候,报错某个参数标识符无效 问题解决方法:尝试将结果集放到一个临时表,再使用pivot函数. 问题描述: 下面的sql中,select已经查出结果集,但加上pi ...

  3. Oracle中pivot函数详解

    [基本介绍] [格式]:pivot(聚合函数 for 需要转为列的字段名 in(需要转为列的字段值)) [说明]:实现将指定字段的字段值转换为列的效果. [环境]:如下图是样例展示所使用的oracle ...

  4. oracle pivot 列转行,Oracle 列转行函数pivot

    作为数据库应用开发人员,我们有很大的精力应付在处理各种各样的数据类型,展现各种维度的报表上面. [url=]行转列[/url].列转行是我们经常会遇到的"诡异"需求.标准SQL没有 ...

  5. oracle非常量不能用于privot_Oracle 行列转换函数pivot、unpivot的使用(二)

    一.行转列pivot 关键函数pivot,其用法如下 pivot(聚合函数 for 列名 in(类型)) select * from table_name pivot(max(column_name) ...

  6. SQL 行转列 列转行 Oracle转置函数函数pivot、unpivot 解决wm_concat 没有排序

    https://www.cnblogs.com/mellowsmile/p/4642306.html HH 终风且暴,顾我则笑,谑浪笑敖,中心是悼. 终风且霾,惠然肯来,莫往莫来,悠悠我思. 博客园 ...

  7. Oracle 行列转换函数pivot使用

    问题描述: 描述:在项目中,需要将表中日期数据行,用视图转列显示月报表 解决方案: 注意:多聚合必须重命名. create table pivottest( 主键 varchar2(50) defau ...

  8. Oracle SQL 行转列,pivot函数和unpivot函数

    转:Oracle行转列,pivot函数和unpivot函数 - waynelo - 博客园 (cnblogs.com) pivot函数:行转列函数: 语法:pivot(任一聚合函数 for 需专列的值 ...

  9. oracle列转行查询,Oracle列转行函数Listagg以及pivot查询示例

    简单的Oracle列转行函数Listagg示例: CREATE TABLE tbl_test (catalog VARCHAR(1),product VARCHAR(2),amount NUMBER) ...

最新文章

  1. Dubbo开源现状与未来规划
  2. docker 在容器外执行某个容器内的某个命令
  3. idea tomcat乱码_Tomcat新手常见问题
  4. SQL Server2008 表旋转(pivot)技术
  5. python 加密解密_python加密解密
  6. C#在Linux+Mono环境中使用微信支付证书
  7. 手动编译Spring4.2源码,以及把源码导入myEclipse中
  8. 戴尔optiplex3020主板接线_戴尔XPS 13 2020上手,12999元的高端精致怪,让苹果也很有压力!...
  9. 全局 快捷键_表格快捷键
  10. 2012年软件评测师真题精选
  11. Android 图片压缩详解
  12. python 饼图笔记 两个饼图 双饼图 复合饼图 两个饼图 环形图
  13. 「抖音同款播放器」上市:卡顿、黑屏和模糊,这些技术来解决
  14. 求职技巧:网投简历如何才能做到最抢眼
  15. linux游戏掌机,一起来猎奇:窄众平板/游戏掌机推荐
  16. SqlServer根据时段统计数据
  17. 安装rpm 树莓派4_树莓派3上安装使用centos 7.4
  18. 幽默感七个技巧_如何提高幽默感
  19. 英特尔会是下一个诺基亚吗?
  20. 优思学院:DMAIC六西格玛改进模型

热门文章

  1. GIMP 2.10 图像处理脚本推荐
  2. 搭建服务器(保姆级教程)
  3. Linux 创建文件系统及挂载文件系统流程详解(转)
  4. QLExpress使用问题
  5. [c/c++] memory ordering
  6. 制作简单的div盒子
  7. 三国杀军争java_三国杀军争这八个武将上场就能赢,不管你是什么身份只要选他们!...
  8. Python 自动化-pywinauto库print_control_identifiers()方法打印内容显示不全解决办法,cmd展示更多内容设置方法
  9. ABAP使用AMDP调用HANA存储过程
  10. 遇见未来 | 对话叶毓睿:人类文明运行在软件之上