`
学会做人
  • 浏览: 121054 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Oracle decode函数处理复杂报表

阅读更多
 
员工10月考勤总汇表

行号 工号 姓名 迟到 旷工 合 请假 事假
1 100 张三 1 2 7 7 4
2 100 李四 0 0
3 100 王五 3 2 0 0
4 101 杨六 5 1 6 2 2


表格设计一: 方案一

     完全按照汇总表来设计:
分析:如果客户要求增加新的考勤类型,例如早退,目前这种设计也要必须改动表达结构 的结构
但是,表达结构是绝对不能够动的,

   结论:这种设计是不科学的


关键:如果增加字段‘’ 早退,你的数据库表会重新设计吗?
在 设计方案一中会重新设计表达结构,不可能为每一个报表专门建一张表。





表格设计二

员工表 考勤类型表

工号 考勤编号
姓名 名称



考勤表
流水号
工号
考勤编号
日期

员工表t_emp 考勤类型表 t_checktype

eid ename esex type_id type_name
100 郭靖 1 1 迟到
101 杨过 1 2 矿工
102 黄蓉 2 3 病假
103 小龙女 2


特别注意:在报表开发中,1是迟到,定下来以后不能改变




考勤表    t_check (记录每人每天都考勤情况)

eid check_date type_id
100 2007-11-01 1
101 2007-11-01 2
102 2007-11-03 2
103 2007-11-04 3

根据汇总的情况,应该增加4个列:所以现在就是统计出各种考勤的次数,统计出迟到
的次数,矿工、事假、病假

因为报表都与时间有关、所以统计时不要忘记时间限制





一、建表语句           

CREATE TABLE t_emp
(
eid NUMBER PRIMARY KEY,
ename VARCHAR2(20),
esex VARCHAR2(4)
)


CREATE TABLE t_checktype(
type_typeid NUMBER PRIMARY KEY,
type_name VARCHAR2(20)

)



CREATE TABLE t_check(
eid NUMBER ,
check_date DATE ,
type_typeid NUMBER,
  FOREIGN KEY (eid)REFERENCES t_emp(eid),
  FOREIGN KEY (type_typeid)REFERENCES t_checktype(type_typeid)
)


--添加exce里测试数据的一种方法
SELECT t.* ,ROWID FROM t_emp t;
SELECT t.* ,ROWID FROM t_check t;
SELECT t.* ,ROWID FROM t_checktype t;

--设计2:添加探亲的功能
SELECT t.eid,
    sum(decode(t.type_typeid,1,1,0))迟到 ,
    sum(decode(t.type_typeid,2,1,0))矿工,
    SUM(decode(t.type_typeid,3,1,4,1,0))合计,
    sum(decode(t.type_typeid,3,1,0))病假,
    sum(decode(t.type_typeid,4,1,0))事假,
    sum(decode(t.type_typeid,5,1,0))探亲
   FROM t_check t
   WHERE  to_char(t.check_date,'yyyy.mm')=2007.11
   GROUP BY t.eid;
   --在这种情况下,利用decode函数,报表改动时(基于报表通常不轻易改变,
  -- 只需要对数据和sql改一下就可以了,表的结构还是没有变
  
  


--在实际工作中,如果对上面的建立视图,则包含了日期,一般建立视图
--都要把范围建立的更广一点

  
  
  
CREATE OR REPLACE VIEW v_check
AS
SELECT t.eid,
    sum(decode(t.type_typeid,1,1,0))迟到 ,
    sum(decode(t.type_typeid,2,1,0))矿工,
    SUM(decode(t.type_typeid,3,1,4,1,0))合计,
    sum(decode(t.type_typeid,3,1,0))病假,
    sum(decode(t.type_typeid,4,1,0))事假,
    sum(decode(t.type_typeid,5,1,0))探亲
     FROM t_check t
     GROUP BY t.eid;
    
  SELECT * FROM v_check  
 
  --设计3:要增加显示姓名,则将员工表和视图表连接就可以了
  SELECT * FROM
     t_emp e, v_check  c
     WHERE e.eid = c.eid;
 
分享到:
评论

相关推荐

    ORACLE DECODE函数在中国式报表统计查询中的组合条件实现

    ### ORACLE DECODE函数在中国式报表统计查询中的组合条件实现 #### 一、引言 在Oracle数据库中,`DECODE`函数是一种非常实用的功能,主要用于条件判断并返回不同的值。它经常被用来进行简单的条件分支处理,尤其...

    ORACLE 列转行 DECODE函数用法

    总之,Oracle的DECODE函数是处理列值转换的强大工具,它可以在列转行的过程中帮助你构建灵活且易于理解的查询结果。结合PIVOT和其他函数,你可以实现复杂的报表逻辑,让数据分析变得更加简单直观。在实际应用中,...

    Oracle DECODE函数语法使用介绍

    总的来说,Oracle DECODE函数是数据库查询中的一个重要工具,尤其在处理条件判断和数据转换时,能够提供简洁而高效的解决方案。尽管它不是SQL标准的一部分,但在Oracle环境中,DECODE的灵活性和实用性使其成为不可或...

    Oracle中Decode()函数使用技巧

    Oracle中的Decode()函数...综上所述,Oracle的Decode()函数是一个强大而灵活的工具,能有效地处理简单的条件判断,提高代码可读性和效率。在理解其基本用法的同时,也需要根据具体需求和性能考虑来选择合适的应用场景。

    decode函数[归类].pdf

    在处理住房公积金报表的例子中,DECODE函数可以帮助将不同经办行的代码转换为对应的描述,使得报表更易读。 DECODE虽然不是SQL标准的一部分,但它的实用性使得其他数据库供应商也开始考虑类似的实现。尽管有时会有...

    decode函数借鉴.pdf

    DECODE 函数还可以用来实现数据的格式转换,例如,在住房公积金报表置换实例中,我们可以使用 DECODE 函数来实现数据的转换和处理。 DECODE 函数是 Oracle 公司独家的功能强大的函数,它提供了简洁的运算方式、可控...

    oracle内置函数学习

    通过深入学习和实践Oracle内置函数,你可以提高数据库操作的效率,优化查询性能,同时也能更好地应对各种复杂的数据处理场景。无论是初学者还是经验丰富的DBA,对这些内置函数的熟练掌握都将极大地提升你的数据库...

    oracle日常函数文档

    以上只是Oracle日常函数的一小部分,实际使用中还有许多其他功能强大的函数,如条件判断函数`DECODE()`,位运算函数,窗口函数等。学习并熟练掌握这些函数,能极大地提升在Oracle数据库中的工作效率,对于初学者来说...

    Oracle常见函数集锦

    通过学习和实践提供的SQL脚本,如“汇总报表开发过程学习研究.sql”和“分析sql.txt”,可以进一步加深对Oracle函数的理解和应用。 在日常工作中,可以结合各种工具,如SQL Developer、Toad等,来编写、测试和优化...

    SQL语句的DECODE和NVL

    DECODE 函数是 Oracle 公司独家提供的功能,它是一个功能很强的函数,可以实现复杂的逻辑判断和数据处理。DECODE 函数的语法如下: DECODE(value, if1, then1, if2, then2, if3, then3, ... else) 其中,value ...

    Decode函数的用法(视图)

    在数据库开发中,为了满足特定的数据展示需求,我们经常需要对数据进行行列转换。...在实际项目中,这种技术可以广泛应用于报表生成、数据分析等各种场景,帮助开发者更灵活地处理和展示数据库中的信息。

    oracle 函数文档

    6. **转换函数**:TO_NUMBER用于将字符串转换为数值,DECODE函数提供了一种简单的条件判断,而CAST函数可以将一种数据类型转换为另一种。 7. **其他函数**:包括位运算函数(BITAND、BITOR等)、级联查询的CONNECT_...

    Oracle系统函数

    Oracle系统函数是数据库管理系统Oracle中的一个重要组成部分,它们是预定义的、用于执行特定数据库操作的特殊函数。这些函数极大地丰富了SQL语言的功能,使得数据库管理员和开发人员能够更有效地管理和查询数据。...

    Oracle常用函数集合

    1. **数值函数**:Oracle提供了多种处理数字的函数,如`ROUND()`用于四舍五入,`TRUNC()`用于截断小数,`MOD()`计算余数,`DECODE()`用于条件判断,以及`POWER()`和`SQRT()`用于求幂和平方根。 2. **日期时间函数**...

    ORACLE9I函数帮助(英文)

    9. **游标和循环处理**:在PL/SQL中,游标(如`CURSOR`)和循环结构(如`FOR`、`WHILE`)允许动态处理单个或一组记录,是处理复杂业务逻辑的基础。 10. **游标函数**:如`%ROWTYPE`和`%NOTFOUND`等,用于处理结果集...

    oracle函数大全(chm格式分类显示)

    Oracle还提供许多其他函数,如系统信息函数(`USER`, `DATABASE`等)、条件判断函数(`DECODE()`, `CASE`语句等)、正则表达式函数(`REGEXP_LIKE()`等)和数学函数(`ACOS()`, `SIN()`等),涵盖了数据库操作的...

    Oracle Decode()函数使用技巧分享

    Oracle的Decode()函数是PL/SQL中的一个非常实用的工具,尤其对于简化SQL查询和处理逻辑判断具有显著的优势。此函数允许我们在不使用复杂的IF-THEN-ELSE或CASE语句的情况下,实现条件判断和值的转换。由于Oracle是...

    Oracle常用函数汇总

    Oracle数据库系统提供了丰富的函数库,帮助用户在处理数据时进行各种复杂的操作。以下是一些常用的Oracle函数,包括SQL组函数和一些杂项函数的详细解释。 **SQL Group Functions** 1. **AVG(distinct or all num)*...

    oracle函数参考文档

    条件判断函数如`CASE`和`DECODE`在编程和报表中很常见。`CASE`允许根据条件返回不同的值,而`DECODE`则提供了一种简洁的替代方式,当指定的值与给定的比较项匹配时返回相应的结果。 七、级联函数 Oracle的级联函数...

Global site tag (gtag.js) - Google Analytics