Decode函数说明以及纵横表的转化

Decode函数说明

含义解释:

  • decode(字段或字段的运算,值1,值2,值3)

   这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
    当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多

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

    该函数的含义如下:
  IF 条件=值1 THEN
    RETURN(翻译值1)
  ELSIF 条件=值2 THEN
    RETURN(翻译值2)
    ......
  ELSIF 条件=值n THEN
    RETURN(翻译值n)
  ELSE
    RETURN(缺省值)
  END IF


用法

1.比较大小

select decode(
sign(a.salesprice-a.wholesalesprice),
--sign 函数大于0返回1,小于0返回-1,0返回0
0,‘一样‘,
‘1‘,‘价格大‘,
‘-1‘,‘价格小‘),
a.salesprice,a.wholesalesprice from hrip.dict_item_charge a

2.统计数量

select
sum(decode(p.sexname,‘男‘,1,0)) 男的数量,
sum(decode(p.sexname,‘女‘,1,0)) 女的数量
from hrip.pati_info_basic p

3.子查询

select decode(b.sexname,
‘男‘,(select w.patiid from hrip.pati_info_workunit w where w.patiid = b.patiid),
‘女‘,(select w.patiid from hrip.pati_info_workunit w where w.patiid = b.patiid),
‘不清楚性别‘) from hrip.pati_info_basic b

其他

  • 此函数Oracle专用,还可以用于字符串搜索,主键值加一等,灵活运用。

ORACLE中纵横表的转化

假设有张学生成绩表(zb)如下:

我现在我需要得到如下的数据

用DECODE或者CASE来实现相互转化:

select name 姓名,
  max(case subject when ‘语文‘ then result else 0 end) 语文,
  max(case subject when ‘数学‘ then result else 0 end) 数学,
  max(case subject when ‘物理‘ then result else 0 end) 物理
from zb
group by name;
----------------------------------------------------------------------
select name 姓名,
       max(decode(subject, ‘语文‘, result, 0)) 语文,
       max(decode(subject, ‘数学‘, result, 0)) 数学,
       max(decode(subject, ‘物理‘, result, 0)) 物理
  from zb
 group by name;

这两个语句都可以实现我们的需求。

反之:

select *
  from (select 姓名 as Name, ‘语文‘ as Subject, 语文 as Result
          from hb
        union all
        select 姓名 as Name, ‘数学‘ as Subject, 数学 as Result
          from hb
        union all
        select 姓名 as Name, ‘物理‘ as Subject, 物理 as Result
          from hb) t
 order by name,
          case Subject
            when ‘语文‘ then
             1
            when ‘数学‘ then
             2
            when ‘物理‘ then
             3
          end;

此时我们还可以增加总分,平均分的字段:

select *
  from (select 姓名 as Name, ‘语文‘ as Subject, 语文 as Result
          from hb
        union all
        select 姓名 as Name, ‘数学‘ as Subject, 数学 as Result
          from hb
        union all
        select 姓名 as Name, ‘物理‘ as Subject, 物理 as Result from hb) t
 order by name,
          case Subject
            when ‘语文‘ then
             1
            when ‘数学‘ then
             2
            when ‘物理‘ then
             3
          end;

原文地址:https://www.cnblogs.com/zhoufei2514/p/10185265.html

时间: 2024-08-29 15:17:22

Decode函数说明以及纵横表的转化的相关文章

oracle decode函数使用方法

DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能.DECODE有什么用途 呢? 先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的将加20%:工资在8000元以上的加15%,通常的做法是,先选出记录 中的工资字段值? select salary into var-salary from employee,然后对变量var-salary用if-then-else或cho

oracle decode函数用法

DECODE函数是ORACLE PL/SQL是功能强大的函数之中的一个,眼下还仅仅有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能.DECODE有什么用途 呢? 先构造一个样例,如果我们想给智星职员加工资,其标准是:工资在8000元下面的将加20%:工资在8000元以上的加15%.通常的做法是.先选出记录 中的工资字段值? select salary into var-salary from employee,然后对变量var-salary用if-then-else

Oracle自我补充之Decode()函数使用介绍

decode()函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能. DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能.DECODE有什么用途 呢? 先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的将加20%:工资在8000元以上的加15%,通常的做法是,先选出记录 中的工资字

oracle的decode函数

以下转自百度, 类似于case... when... then...else...end... DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能.DECODE有什么用途 呢? 先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在8000元以下的将加20%:工资在8000元以上的加15%,通常的做法是,先选出记录 中的工资字段值? select salary into var-salar

Oracle 中 decode 函数用法

Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IFdecode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值

Oracle 中 decode 函数用法(转)

含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THEN RETURN(翻译值2) ...... ELSIF 条件=值n THEN RETURN(翻译值n) ELSE RETURN(缺省值) END IF decode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3 当然值1,

用decode函数实现行变列

用decode函数实现行变列----创建测试表create table student_score(name varchar2(20),subject varchar2(20),score number(4,1));-----插入测试数据insert into student_score (name,subject,score)values('张三','语文',78);insert into student_score (name,subject,score)values('张三','数学',8

转载-Oracle ORACLE的sign函数和DECODE函数

原文地址:http://www.cnblogs.com/BetterWF/archive/2012/06/12/2545829.html 转载以备用 比较大小函数 sign 函数语法:sign(n) 函数说明:取数字n的符号,大于0返回1,小于0返回-1,等于0返回0 示例:一.select sign( 100 ),sign(- 100 ),sign( 0 ) from dual; SIGN(100) SIGN(-100) SIGN(0) ---- ---- ---- 1 -1 0 二.a=10

Oracle Decode函数的使用

DECODE函数的可以根据用户给定的判定条件给定想要的结果 语法: DECODE(expr,{search,result,}-.,default) 这里给的search,result可以是多个,而括号里所有元素的组合最多是255个. 今天在写一个语句的时候有一个简单的想法,就是遇到数值的进行自动换算,遇到字符返回原值 selectname,value from v$parameter wherenamein ('control_file_record_keep_time', 'db_block_