oracle decode&sign 函数联合的用法,替换 case when (zt)

decode函数可以通过比较进行内容的转换,完成的功能相当于分支语句。该函数的第一个参数为要进行转换的表达式,以后的参数成对出现,最后一个参数可以单独出现。如果第一个参数的值与第二个表达式的值相等,则返回第三个表达式的值;如果不等则继续比较,如果它的值与第四个表达式的值相等,则返回第五个表达式的值,以此类推。在参数的最后位置上可以存在单独的参数,如果以上比较过程没有找到匹配值,则返回该参数的值,如果不存在该参数,则返回NULL。

示例:
将职务转换成中文显示。
执行以下查询:
SELECT ename,decode(job, 'MANAGER', '经理', 'CLERK','职员', 'SALESMAN','推销员', 'ANALYST','系统分析员','未知') FROM emp;

结果为:
ENAME DECODE(JOB
-------------- ------------------------
SMITH 职员
ALLEN 推销员
WARD 推销员
JONES 经理
MARTIN 推销员
BLAKE 经理
CLARK 经理
SCOTT 系统分析员
KING 未知
TURNER 推销员
ADAMS 职员
JAMES 职员
FORD 系统分析员
MILLER 职员
已选择14行。

说明:在以上训练中,如果job字段的内容为“MANAGER”则返回“经理”,如果是“CLERK”则返回“职员”,以此类推。如果不是“MANAGER”、“CLERK”、“SALESMAN”和“ANALYST”之一,则返回“未知”,如KING的职务“PRESIDENT”不在上述范围,返回“未知”。


question:
-----------------------------------------------------------
有这样一个表,中有三字段:部门、姓名、工资;
如:
BM NAME GZ
A 张三  890
A 李四 1500
B 王二 3200
...
想得到以下统计结果:
部门 工资<1000人数 工资1000-3000人数 工资>3000人数
A 10 15 8
...
answer:
-----------------------------------------------------------
select bm,
sum(decode(sign(gz - 1000),-1,1,0)) "工资<1000人数",
sum(decode(sign(gz - 1000) + sign(gz - 3000),0,1,0)) "工资1000-3000人数",
sum(decode(sign(gz - 3000),1,1,0)) "工资>3000人数"
from your_table
group by bm ;

附加一个经理写的decode和sign联合起来用的语句

功能是计算滞纳金 4月1号以前滞纳金金额超过罚款金额不再累积4月1日以后的滞纳金


SELECT DECODE(SIGN(TRUNC(to_date('2009-04-01','yyyy-mm-dd')-FBSJ)-17),1,TRUNC(to_date('2009-04-01','yyyy-mm-dd')-FBSJ)-17,0)*.03*WFFKJE as znj41, DECODE(SIGN(TRUNC(SYSDATE-FBSJ)-17-(DECODE(SIGN(TRUNC(to_date('2009-04-01','yyyy-mm-dd')-FBSJ)-17),1,TRUNC(to_date('2009-04-01','yyyy-mm-dd')-FBSJ)-17,0))),1,TRUNC(SYSDATE-FBSJ)-17-DECODE(SIGN(TRUNC(to_date('2009-04-01','yyyy-mm-dd')-FBSJ)-17),1,TRUNC(to_date('2009-04-01','yyyy-mm-dd')-FBSJ)-17,0),0)*.03*WFFKJE as znjLast41, fbsj,wffkje FROM DZJC.DZJC_FLOW F,DZJC.DZJC_WFDM W WHERE F.ZNJBJ='1' AND F.WFDM=W.DMZ AND F.XH=ANY(81)


黑色头发:http://heisetoufa.iteye.com/
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值