ORACLE函數sign()用法


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:

Java代碼   收藏代碼
  1. create table TEST_TB_GRADE    
  2. (    
  3.   ID        NUMBER(10) not null,    
  4.   USER_NAME VARCHAR2(20 CHAR),    
  5.   COURSE    VARCHAR2(20 CHAR),    
  6.   SCORE     FLOAT    
  7. )  


初始數據如下圖:



如果需要實現如下的查詢效果圖:



這就是最常見的行轉列,主要原理是利用decode函數、聚集函數(sum),結合group by分組實現的,具體的sql如下:

Java代碼   收藏代碼
  1. select t.user_name,    
  2.       sum(decode(t.course, '語文', score,null)) as CHINESE,    
  3.       sum(decode(t.course, '數學', score,null)) as MATH,    
  4.       sum(decode(t.course, '英語', score,null)) as ENGLISH    
  5.     from test_tb_grade t    
  6.     group by t.user_name    
  7.     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;

原文鏈接:https://www.iteye.com/blog/wentao365-1156889


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM