[Oracle整理]CASE-END

说明:本内容是工作用到的知识点整理,来自工作中和网络。
代码于Oracle9上测试。

 

作用:

1可用来进行数据资料行转列的功能

2可用来对数据进行判断,类似decode,但CASE语句在处理范围条件的时候会显得非常灵活。如果只是需要匹配少量数值时,用Decode更为简洁

3CASE开头,以END结尾分支中WHEN 后跟条件,THEN为显示结果 ELSE 为除此之外的默认情况,类似于高级语言程序中switch casedefault,可以不加

语法:

Case when  expression1 then result1

     when  expression2 then  result2

     ……

     Else  result

END

例子

产品每天的销售额

clip_image002

制作销售额报表,通常习惯将日期作为表格的标题。

clip_image004

如何实现?

SELECT product_name,
       category_name,
       SUM((CASE
         WHEN to_char(SALE_date, 'yyyy/mm/dd') = '2011/10/01' THEN  sales
         ELSE 0
       END)) "10/01",
       SUM((CASE
         WHEN to_char(SALE_date, 'yyyy/mm/dd') = '2011/10/02' THEN  sales
         ELSE 0
       END)) "10/02",
       SUM((CASE
         WHEN to_char(SALE_date, 'yyyy/mm/dd') = '2011/10/03' THEN  sales
         ELSE 0
       END)) "10/03"
  FROM xx_test1
  GROUP BY product_name,category_name

DECODE

作用:

1 进行数据资料行转列

语法:

DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )

A Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果。

B 当每个value值被测试,如果value的值为if1Decode 函数的结果是then1;如果value等于if2Decode函数结果是then2;等等。

C 事实上,可以给出多个if/then 配对。

D 注意,这里的ifthenelse 都可以是函数计算表达式(加,减,乘,除)。

例子:

1)使用字段

SELECT decode(category_name,'01','Apple','Pear') FROM xx_test1

2)使用计算表达式——加,减,乘,除

SELECT decode(1+1,2,'Apple','Pear') FROM xx_test1;

SELECT decode(1-1,2,'Apple','Pear') FROM xx_test1;

SELECT decode(1*1,2,'Apple','Pear') FROM xx_test1;

SELECT decode(1/1,2,'Apple','Pear') FROM xx_test1;

3)使用函数

SELECT decode(to_char(sysdate,'mon'),'nov','冬月','dec','腊月',to_char(sysdate,'mon')) FROM dual

比较:

相同:

进行数据资料行转列

不同:

1)CaseEnd可以使用所有的表达式;Decode只是可用算术表达式,不可用逻辑表达式(= > < !=)。

2)CaseEnd可以用多个不同的字段来进行判断;Decode只可用一个字段。

3)CaseEndsql/92标准的一部分,哪儿都能用,也就是说移植性更强.

4)DecodeOracle专有的。

5)Decode方便,简洁;CaseEnd灵活。

应用场景

1)        功能比较简单时,Decode。因为方便,简洁。

2)        要用表达式的都是CaseEnd

3)        Decode满足不了时就用CaseEnd

转载于:https://www.cnblogs.com/htht66/archive/2012/01/29/2330962.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值