用SQL 实现统计报表中的“小计”和“合计” 先来一段概念: ---------------------- DECODE 函数是 ORACLE PL/SQL 是功能强大的函数之一,目前还只有 ORACLE 公司的SQL 提供了此函数,其他数据库厂商的SQL 实现还没有此功能
DECODE 有什么用途 呢
先构造一个例子,假设我们想给智星职员加工资,其标准是:工资在 8000 元以下的将加 20%;工资在 8000 元以上的加 15%,通常的做法是,先选出记录 中的工资字段值
select salary into var-salary from employee,然后对变量 var-salary 用if-then-else 或 choose case 之类的流控制语句进行判断
如果用DECODE 函数,那么我们就可以把这些流控制语句省略,通过 SQL 语句就可以直接完成
如下:select decode(sign(salary - 8000),1,salary*1
15,-1,salary*1
2,salary from employee 是不是很简洁
DECODE 的语法:DECODE(value,if1,then1,if2,then2,if3,then3,
,else),表示如果 value 等于if1 时,DECODE 函数的结果返回then1,
,如果不等于任何一个 if 值,则返回else
初看一下,DECODE 只能做等于测试,但刚才也看到了,我们通过一些函数或计算替代value,是可以使DECODE 函数具备大于、小于或等于功能
-------------------------- 在 开发统计报表的过程中,经常会碰到在查询 到的数据集 中,插 入 一些小计行和合计行
比 如在烤 烟 系 统中,几 乎 每 个统计报表都 需 要 加入 “合计”行