首页 > 数据库 >oracle中pivot函数的用法

oracle中pivot函数的用法

时间:2022-08-24 16:13:55浏览次数:52  
标签:fundtype sum userID shares 用法 oracle pivot select

pivot函数:对查询结果行转列进行统计
示例:
比如我想查每个用户投资的各种类型基金的分别有多少份额
平常的写法:

select userID,fundtype,sum(shares) 
from  userasset
group by userID,fundtype;

这样展示,如果行数很多的话,就很不直观,我看不出来某个基金哪个人投资最多,要看某个人投资的某个基金份额数,也要对照着fundtype去找。就很不方便。
我想一个人展示成一行,这样就好看多了
可以这样写

select userID,
       sum(decode(fundtype,'11',shares,0)) type11,
       sum(decode(fundtype,'12',shares,0)) type12,
       sum(decode(fundtype,'13',shares,0)) type13,
       sum(decode(fundtype,'14',shares,0)) type14,
from userasset
 group by userID,fundtype;

也可以这样写

select userID,
       sum(case fundtype when '11' then shares else 0 end) type11,
       sum(case fundtype when '12' then shares else 0 end) type12, 
       sum(case fundtype when '13' then shares else 0 end) type13,
       sum(case fundtype when '14' then shares else 0 end) type14 
from userasset
group by userID,fundtype;

效果是一样的:

 

 

pivot的写法如下:

select *
  from (select userID, fundtype, shares
          from userasset
         ) t
pivot(sum(shares)
   for fundtype in('11' type11,'12' type12,'13' type13,'14' type14 ));

效果跟上图一致。复杂查询的时候写法相比就会显得简单一点。
pivot里除了可以sum 也可以avg min max等其他表达式

 

标签:fundtype,sum,userID,shares,用法,oracle,pivot,select
From: https://www.cnblogs.com/Samuel-Leung/p/16620403.html

相关文章

  • 修改Oracle共享池大小
    1. sysdba登录数据库[oracle@ufdb165~]$sqlplus/nologSQL*Plus:Release11.2.0.4.0ProductiononWedAug2415:12:202022Copyright(c)1982,2013,Oracl......
  • git高级用法
    前言使用Git作为代码版本管理,早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送,遇到一些commit管理的问题就束手无策,或者用一些不优雅......
  • oracle 怎么查看用户对应的表空间
    oracle怎么查看用户对应的表空间?查询用户:查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system:select*fromdba_users;查看你能管理的所有用户:select......
  • 【转载】Python(cx_oracle)的DPI-1047错误
    转自:https://blog.csdn.net/weixin_45158749/article/details/124800132 Python(cx_oracle)的DPI-1047错误步步FAN已于2022-05-1615:19:11修改981收藏文章标签:......
  • 排序用法
    1.基础排序varlist=db.Queryable<Student>().OrderBy("StudentIdDESC").ToList();//SELECT`StudentId`,`Name`,`SchoolId`FROM`Student`ORDERBYStudentIdDE......
  • oracle数据库性能监控常用sql
    因执行时间较长建议使用plsql等第三方工具执行--1.监控sga内存分配信息select*fromv$sgainfo;--2.监控每个用户的磁盘io及io命中率selectv$sess_io.*,(block_gets+con......
  • PLSQ解决Oracle锁表
         ......
  • c# Dictionary.TryGetValue()的用法
    官方解释 上面解释:1)TryGetValue是根据key返回相应的数据到value,如果没有key则返回默认值到value;2)这个方法的返回是bool值,如果dictionary里有存在相应的k......
  • 远程桌面 CredSSP加密Oracle修正
    这个问题比较容易出现,所以记下来。1.打开注册表,快捷输入“regedit”(类似找命令提示符输入cmd一样)2.找文件夹路径:(大概到System后就没有了自己创建文件夹就好。) H......
  • 简述JS中forEach()、map()、every()、some()和filter()的用法
    在文章开头,先问大家一个问题:在Javascript中,如何处理数组中的每一项数据?有人可能会说,这还不简单,直接一个for循环遍历一下就好了。是的,确实,这是最常见的做法。但是,除......