首页 > 代码库 > oracle_decode

oracle_decode

decode(条件,值1,返回值1,值2,返回值2,……,值n,返回值n,缺省值)

含义:

  if 条件=值1 then

      return (返回值1)

  else if 条件=值2

        return (返回值2)

  ……

  else if 条件=值n

         return (返回值n)

  end if

--------------------------------------------------------------------------

 比大小 

  sign()函数根据某个值是0,正数还是负数,分别返回0,1,-1.

  select decode(sign(变量1-变量2),-1,变量1,变量2)

--------------------------------------------------------------------------

行列互转

表1:socre

  Name  Subject  Result

1     张三      语文     90

2     张三      数学     98 

3     张三      英语     76

4     李四      语文     71

5     李四      语文     72

6     李四      语文     73

-------decoe---

select Name, 

    sum(decode(Subject,‘语文‘,Result,0)) 语文,

    sum(decode(Subject,‘数学‘,Result,0)) 数学,

    sum(decode(Subject,‘英语‘,Result,0)) 英语,

from score;

-------case when-then-end---

select Name,

    sum(case when Subject=‘语文‘ then Result end) 语文,

    sum(case when Subject=‘数学‘ then Result end) 数学,

    sum(case when Subject=‘英语‘ then Result end) 英语,

from score;

-----------------结果----------------------------------------------

  Name  语文  数学  英语

1     张三     90       98        76

2     李四   71      72        73

 

-----在order by 中使用decode------------

按语,数,外进行排列  select * from score order by decode(Subject,‘语文‘,1,‘数学‘2,‘英语‘3)

 

---分别统计男女生数量----

一、

select count(*) from 表 where sex=‘男‘‘;

select count(*) from 表 where sex=‘女‘;

二、

select sum(decode(sex,男,1,0)) 男,sum(decode(sex,女,1,0)) 女 from 表;

 

oracle_decode