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:
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. )  

初始数据如下图:

http://dl.iteye.com/upload/attachment/542755/75aba354-a924-35b5-a8ea-bcc86bd2104c.png?_=2248718

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

http://dl.iteye.com/upload/attachment/542757/fb55f8c4-9133-3b24-994f-a35d1beca19b.png?_=2248718

这就是最常见的行转列,主要原理是利用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   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值