ORACLE的sign函数 和 DECODE函数

1:比较大小函数 SIGN

sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1 ,例如:
引用
a=10,b=20
则sign(a-b)返回-1

2:流程控制函数 DECODE

DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商还没有实现此功能。假设想给职员加工资,其标准是:工资在8000元以下的将加20%;工资在8000元以上的加15%,8000 元的不加。实现:
select decode(sign(salary - 8000),1,salary*1.15,-1,salary*1.2,salary from employee

含义解释:
引用
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)


应用 行转列

表结构:TEST_TB_GRADE:
create table TEST_TB_GRADE  
(  
  ID        NUMBER(10) not null,  
  USER_NAME VARCHAR2(20 CHAR),  
  COURSE    VARCHAR2(20 CHAR),  
  SCORE     FLOAT  
)

初始数据如下图:



如果需要实现如下的查询效果图:



这就是最常见的行转列,主要原理是利用decode函数、聚集函数(sum),结合group by分组实现的,具体的sql如下:
select t.user_name,  
      sum(decode(t.course, '语文', score,null)) as CHINESE,  
      sum(decode(t.course, '数学', score,null)) as MATH,  
      sum(decode(t.course, '英语', score,null)) as ENGLISH  
    from test_tb_grade t  
    group by t.user_name  
    order by t.user_name  


nvl
nvl(a,b) 如果a不为null 则返回a,如果a为null则返回b;

nvl2
nvl2(a,b,c) ,如果a不为null 则返回b,如果a为null则返回c;

猜你喜欢

转载自wentao365.iteye.com/blog/1156889