ORACLE中,迁移数据会用到的语句分析(二)

示例3:decode

INSERT INTO org (uuid, unit, status) 

      SELECT t.uuid, '无' unit, decode(t.datastatus, 1, 0, 1) status,  FROM drug.company t WHERE t.name= 1;      //数据库drug中company表

 

        含义解释:  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,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多使用方法: 

1、比较大小 select decode(sign(变量1-变量2),-1,变量1,变量2) from dual;

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

         例如: 变量1=10,变量2=20 sign(变量1-变量2)返回-1,decode解码结果为“变量1”,达到了取较小值的目的。

eg:

select decode(dir,1,0,1) from a1_interval

     dir 的值是1变为0,是0则变为1;     比如我要查询某班男生和女生的数量分别是多少?

通常我们这么写:

          select count(*) from 表 where 性别 = 男;

         select count(*) from 表 where 性别 = 女;

要想显示到一起还要union一下,太麻烦了

               用decode呢,只需要一句话  select sum(decode(性别,男,1,0)),sum(decode(性别,女,1,0)) from 表

eg:

              select sum(decode(siteno,'LT',1,0)),sum(decode(siteno,'SZ',1,0)) from facd605;

等价于:

              select sum(case siteno when 'LT' then 1 else 0 end),sum(case siteno when 'SZ' then 1 else 0 end) from facd605;

 示例:

Select (case when s.types in (1,2,3,4,5) THEN 1

                     when s.types in (6,7,8,9,10,11,12,13) THEN (s.types-5)

                      when s.types in (14,15) THEN 9

             end) billType from students s

posted @ 2017-07-04 20:41  小码农成长记  阅读(130)  评论(0)    收藏  举报