Oracle 神级函数 Decode 实战:一条 SQL 替代 3000 行代码的计算逻辑​

在企业级应用开发中,复杂的业务统计需求往往需要编写大量代码进行数据处理。本文将通过 Oracle 的DECODE函数与分组函数的巧妙结合,展示如何用一条 SQL 语句实现原本需要 3000 行代码的复杂计算逻辑,尤其针对企业组织架构中的部门级请假数据统计场景。

一、基础准备:构建业务数据表

1. 创建单位部门表(模拟组织架构)

CREATE TABLE t_dept (

dept_id NUMBER PRIMARY KEY, -- 部门ID(主键)

dept_name VARCHAR2(50) NOT NULL, -- 部门名称

parent_dept_id NUMBER, -- 上级部门ID(根部门为0)

create_time DATE DEFAULT SYSDATE -- 创建时间

);

-- 插入示例数据(三级部门架构)

INSERT INTO t_dept (dept_id, dept_name, parent_dept_id) VALUES (1, '集团总部', 0);

INSERT INTO t_dept (dept_id, dept_name, parent_dept_id) VALUES (2, '技术研发部', 1);

INSERT INTO t_dept (dept_id, dept_name, parent_dept_id) VALUES (3, '产品运营部', 1);

INSERT INTO t_dept (dept_id, dept_name, parent_dept_id) VALUES (4, '后端开发组', 2);

INSERT INTO t_dept (dept_id, dept_name, parent_dept_id) VALUES (5, '前端开发组', 2);

2. 创建人员请假信息表

CREATE TABLE t_leave (

user_id VARCHAR2(20) PRIMARY KEY, -- 人员账号(主键)

user_name VARCHAR2(30) NOT NULL, -- 人员姓名

dept_id NUMBER NOT NULL, -- 所属部门ID

leave_days NUMBER(5,1), -- 请假天数(保留1位小数)

leave_type VARCHAR2(20), -- 请假类型(年假/事假/病假等)

leave_status VARCHAR2(10), -- 请假状态('完成'/'进行中')

apply_time DATE DEFAULT SYSDATE -- 申请时间

);

-- 插入模拟数据(覆盖不同部门/类型/状态)

INSERT INTO t_leave VALUES

('U001', '张三', 4, 3.5, '年假', '完成', TO_DATE('2025-06-01', 'YYYY-MM-DD')),

('U002', '李四', 5, 2.0, '事假', '进行中', TO_DATE('2025-06-10', 'YYYY
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI、少年郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值