decode函数的用法

qq_36934345 2017-05-21 10:05:56

select mp,decode(jydm in ('01','02','03','04','05','06'),-jyje,jyje) as je from table_a where mp='22365263';



decode 函数还不太懂,书上看不明白,一直报缺少右括号,我就想让jydm为这些的时候,jyje为负数,其余不变
...全文
589 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
azh3246 2017-05-22
  • 打赏
  • 举报
回复
decode函数是判断指是否相等的,并不能判断指在哪个范围,   decode(base_exp,exp1,value1,exp2,value2,default)   依次把value的值和base_exp的值比较,如果相等,就输出相应的value,如果都不等,则输出default值
  • 打赏
  • 举报
回复
你这个写得有点乱。 decode 函数 你把他当成 简单的 case 搜索函数 来看就好理解了。
qq_36934345 2017-05-21
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
你现在的这个情况,不大适合用decode,用case when 最好了。 select code(jydm, ‘01’, -jyje, ‘02’, -jyje, jyje) 也就是要把,01 02 03 …每个 值都要写一下。 select case when jydm in(01, 02, 03) then -jyje else jyje end

select  B.GSJGH,nvl(b.sfzh,b.jbxx_zjhm) as sfzh,b.bzjgmc,b.jbxx_sskhq,b.khxm,          b.jbxx_xb,b.jbxx_nl,b.jbxx_khjb,c.WH_KHJLXM,a.jydm,a.jymc,a.cq,a.khrq,a.jyrq,a.dqrq,a.jyje,c.jd_dz from
 (select a.*,b.*,c.* from
      lsb_ls a,
       hxb_and_hzb b,
         jt_jbxxb c 
 where (case when b.jydm in('010203','010503','010606','020131','700204','020613')
           then -b.jyje
      else  b.jyje
    end)
 where nvl(b.sfzh,b.jbxx_zjhm)=c.jd_zjhm(+) and nvl(b.sfzh,b.jbxx_zjhm)=a.sfzh(+) 
   and b.gsjgh='56234585' 
     and (substr(a.jysj,1,10)>='2017-04-15' and substr(a.jysj,1,10)<='2017-05-15')
       and jymc is not null;


老是报 'where nvl(b.sfzh,b.jbxx_zjhm)=c.jd_zjhm(+) and nvl(b.sfzh,b.jbxx_zjhm)=a.sfzh(+) '无效的关系运算符 我就想关联三个表而已,斑竹帮我看看呗
卖水果的net 2017-05-21
  • 打赏
  • 举报
回复
你现在的这个情况,不大适合用decode,用case when 最好了。

select code(jydm, ‘01’, -jyje, ‘02’, -jyje, jyje)
也就是要把,01 02 03 …每个 值都要写一下。

select case when jydm in(01, 02, 03) then -jyje else jyje end
Biubiu_zz 2017-05-21
  • 打赏
  • 举报
回复
引用 2 楼 qq_36934345 的回复:
[quote=引用 1 楼 wmxcn2000 的回复:] 你现在的这个情况,不大适合用decode,用case when 最好了。 select code(jydm, ‘01’, -jyje, ‘02’, -jyje, jyje) 也就是要把,01 02 03 …每个 值都要写一下。 select case when jydm in(01, 02, 03) then -jyje else jyje end

select  B.GSJGH,nvl(b.sfzh,b.jbxx_zjhm) as sfzh,b.bzjgmc,b.jbxx_sskhq,b.khxm,          b.jbxx_xb,b.jbxx_nl,b.jbxx_khjb,c.WH_KHJLXM,a.jydm,a.jymc,a.cq,a.khrq,a.jyrq,a.dqrq,a.jyje,c.jd_dz from
 (select a.*,b.*,c.* from
      lsb_ls a,
       hxb_and_hzb b,
         jt_jbxxb c 
 where (case when b.jydm in('010203','010503','010606','020131','700204','020613')
           then -b.jyje
      else  b.jyje
    end)
 where nvl(b.sfzh,b.jbxx_zjhm)=c.jd_zjhm(+) and nvl(b.sfzh,b.jbxx_zjhm)=a.sfzh(+) 
   and b.gsjgh='56234585' 
     and (substr(a.jysj,1,10)>='2017-04-15' and substr(a.jysj,1,10)<='2017-05-15')
       and jymc is not null;


老是报 'where nvl(b.sfzh,b.jbxx_zjhm)=c.jd_zjhm(+) and nvl(b.sfzh,b.jbxx_zjhm)=a.sfzh(+) '无效的关系运算符 我就想关联三个表而已,斑竹帮我看看呗[/quote] 啥写法啊,外部select 没有from,子查询where 条件没看明白

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧