该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN(翻译值2) ...... ELSIF 条件=值n THEN RETURN(翻译值n)
ELSE RETURN(缺省值) END IF
2 DECODE 的简单例子 Oracle系统中就有许多数据字典是使用decode 思想设计的,比如记录会话信息的V$SESSION数据字典视图就是这样。我们从《Oracle8i/9i Reference》资料中了解到,当用户登录成功后在V$SESSION中就有该用户的相应记录,但用户所进行的命令操作在该视图中只记录命令的代码 (0—没有任何操作,2—Insert…),而不是具体的命令关键字。因此,我们需要了解当前各个用户的名字及他们所进行的操作时,要用下面命令才能得到 详细的结果: select sid,serial#,username, DECODE(command, 0,’None’, 2,’Insert’, 3,’Select’, 6,’Update’, 7,’Delete’, 8,’Drop’, ‘Other’) cmmand from v$session where username is not null; 3 DECODE实现表的转置 数据库中的表是由列和行构成的一个二维表。一般列在任何数据库中都是有限的数量,而行的变化较大,如果表很大,行的数量可能大上千万行。同一列的不同行可能有不同的值,而且不是预先定义的。 例:住房公积金报表置换实例: 1.各个单位在本地经办行进行开户,开户就是将单位的基本信息和职工信息的进行登记; 2.每月各个单位的会计到经办行交缴本单位的所有职工的住房公积金,系统记录有每个职工的交缴明细并在每条记录上记录有经办行的代码; 3.每月、季、半年及年终都要求将经办行 变为“列”给出个月的明细报表: 经办行:城西区 城东区 月份: 2001.01 xxxx1.xx xxxxx2.xx 2001.02 xxxx3.xx xxxxx4.xx 。 。 。 。 。 。 原来的数据顺序是: 城西区2001.01 xxxxx1.xx 城东区2001.01 xxxxx2.xx 城西区2001.02 xxxxx3.xx 城东区2001.02 xxxxx4.xx 住房公积金系统记录职工的每月交缴名细的pay_lst表结构是: bank_code varchar2(6)NOT NULL, -- 经办行代码 acc_no varchar2(15) not null, -- 单位代码(单位帐号) emp_acc_no varchar2(20) not null, -- 职工帐号 tran_date date not null, -- 交缴日期 tran_val Number(7,2) not null, -- 交缴额 sys_date date default sysdate, --系统日期 oper_id varchar2(10) --操作员代码 这样的表结构,一般按照将经办行作为行(row)进行统计是很容易的,但是如果希望将经办行变为列(column)这样的格式来输出就有困难。如果用DECODE函数来处理则变得很简单: 我们创建一个视图来对目前的pay_lst表进行查询。将经办行代码变为一些具体的经办行名称即可: CREATE OR REPLACE VIEW bank_date_lst AS Select to_char(tran_date,’yyyy.mm’), SUM( DECODE ( bank_code,’001’, tran_val,0 )) 城西区, SUM( DECODE ( bank_code,’002’, tran_val,0 )) 城南区, SUM( DECODE ( bank_code,’003’, tran_val,0 )) 城东区 FROM pay_lst GROUP BY to_char(tran_date,’yyyy.mm’); 建立视图后,可直接对该视图进行查询就可按照列显示出结果。
GROUPINNG 指示是否聚合 GROUP BY 列表中的指定列表达式。在结果集中,如果 GROUPING 返回 1 则指示聚合;返回 0 则指示不聚合。如果指定了 GROUP BY,则 GROUPING 只能用在 SELECT
group by rollup rollup(a,b,c)----------------> 从右到底递减汇总 ====>group by a,b,c (减0次) UNION ALL ====>group by a,b (减1次) UNION ALL ====>group by a (减2次) UNION ALL ====>group by null(全部汇总) (全部减掉)
一、group by 后带rollup子句所产生的效果 group by 后 带 rollup 子句的功能可以理解为:先按一定的规则产生多种分组,然后按各种分组统计数据(至于统计出的数据是求和还是最大值还是平均值等这就取决于SELECT后的聚合函数)。因此要搞懂group by 后带rollup子句的用法主要是搞懂它是如何按一定的规则产生多种分组的。另group by后带 rollup 子句所返回的结果 集,可以理解为各个分组所产生的结果集的并集且没有去掉重复数据。 1、对比没有带rollup 的goup by 例:Group by A,B 产生的分组种数:1种; 即group by A,B 返回结果集:也就是这一种分组的结果集。
2、带rollup但group by与rollup之间没有任何内容 例1:Group by rollup(A,B) 产生的分组种数:3 种; 第一种:group by A,B 第二种:group by A 第三种:group by NULL (说明:本没有group byNULL的写法,在这里指是为了方便说明,而采用之。含义是:没有分组,也就是所有数据做一个统计。例如聚合函数是SUM的话,那就是对所有满足条件的数据进行求和。此写法的含义下同) 返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
例2:Group by rollup(A,B,C) 产生的分组种数:4 种; 第一种:group by A,B,C 第二种:group by A,B 第三种:group by A 第四种:group by NULL 返回结果集:为以上四种分组统计结果集的并集且未去掉重复数据。
3、带rollup但group by与rollup之间还包含有列信息 例1:Group by A , rollup(A ,B) 产生的分组种数:3 种; 第一种:group by A,A,B 等价于 group by A,B 第二种:group by A,A 等价于 group by A 第三种:group by A,NULL 等价于 group by A 返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
例2:Group by C,rollup(A,B) 产生的分组种数:3 种; 第一种:group by C,A,B
第二种:group by C,A
第三种:group by C,NULL 等价于 group by C 返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
4、带rollup且rollup子句括号内又使用括号对列进行组合 例1:Group by rollup((A,B)) 产生的分组种数:2 种; 第一种:group by A,B 第二种:group by NULL 返回结果集:为以上两种分组统计结果集的并集且未去掉重复数据。
例2:Group by rollup(A,(B,C)) 产生的分组种数:3 种; 第一种:group by A,B,C 第二种:group by A 第三种:group by NULL 返回结果集:为以上三种分组统计结果集的并集且未去掉重复数据。
select a.* from (select decode(grouping(decode(t.is_lock, 0, '可用', '冻结')), 0, decode(t.is_lock, 0, '可用', '冻结'), '-1') as lockstatus, decode(grouping(d.code_desc), 0, d.code_desc, '-1') as cardstatusName, decode(grouping(e.describe), 0, e.describe, '-1') as card_typeName, decode(grouping(t.case_id),0,t.case_id,'-1') as case_id, decode(grouping(t.start_cardno),0,t.start_cardno,'-1') as start_cardno, decode(grouping(t.end_cardno),0,t.end_cardno,'-1') as end_cardno, sum(t.num) as num, decode(grouping(t.lack_cardno),0,t.lack_cardno,grouping(t.case_id),'','-1') as lack_cardno from wl_buscardstockdetail t left join t_dict_code d on t.cardstatusid = d.code_value and d.dict_id = '00002886' left join t_encoderule_card e on t.cardtypeid = e.markid where 1 = 1 AND t.area_code = '000000000000001' AND t.cardtypeid = '6001001' AND t.prior_money = '10000' group by rollup(decode(t.is_lock, 0, '可用', '冻结'), d.code_desc, e.describe, t.case_id, t.start_cardno, t.end_cardno, t.lack_cardno ) )a where a.lack_cardno<>'-1' or a.lack_cardno is null
附加:group by 后面条件用having
select user_name,count(*) from t_user group by user_name having count(*)>1
你可能感兴趣的:(oracle decode,grouping,group by rollup的用法实例)
同生成的做法一样,添加和移除类成员只要去修改fields和methods中的元素即可。这里我们拿一个简单的类做例子,下面这个Task类,我们来移除isNeedRemove方法,并且添加一个int 类型的addedField属性。
package asm.core;
/**
* Created by yunshen.ljy on 2015/6/
交换两个数字的方法有以下三种 ,其中第一种最常用
/*
输出最小的一个数
*/
public class jiaohuan1 {
public static void main(String[] args) {
int a =4;
int b = 3;
if(a<b){
// 第一种交换方式
int tmep =
1. Kafka提供了两种Consumer API
High Level Consumer API
Low Level Consumer API(Kafka诡异的称之为Simple Consumer API,实际上非常复杂)
在选用哪种Consumer API时,首先要弄清楚这两种API的工作原理,能做什么不能做什么,能做的话怎么做的以及用的时候,有哪些可能的问题
CompositeChannelBuffer体现了Netty的“Transparent Zero Copy”
查看API(
http://docs.jboss.org/netty/3.2/api/org/jboss/netty/buffer/package-summary.html#package_description)
可以看到,所谓“Transparent Zero Copy”是通
// this need android:minSdkVersion="11"
getActionBar().setDisplayHomeAsUpEnabled(true);
@Override
public boolean onOptionsItemSelected(MenuItem item) {
$(document).ready(function () {
var request = {
QueryString :
function (val) {
var uri = window.location.search;
var re = new RegExp("" + val + "=([^&?]*)", &
ArticleSelect类在命名空间HoverTree.Model中可以认为是文章查询条件类,用于存放查询文章时的条件,例如HvtId就是文章的id。HvtIsShow就是文章的显示属性,当为-1是,该条件不产生作用,当为0时,查询不公开显示的文章,当为1时查询公开显示的文章。HvtIsHome则为是否在首页显示。HoverTree系统源码完全开放,开发环境为Visual Studio 2013
1. php 类
I found this class looking for something else actually but I remembered I needed some while ago something similar and I never found one. I'm sure it will help a lot of developers who try to
Design pattern for graph processing.
Since we consider a large number of graph-processing algorithms, our initial design goal is to decouple our implementations from the graph representation