news 2026/4/23 8:02:57

oracle的model子句让sql像excel一样灵活

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
oracle的model子句让sql像excel一样灵活

接触了一个降本增效的项目,数据基本来自总账的各个科目,降的本、增的效的计算过程:会计根据当期账目,将数据填入Excel,设置好Excel公式后自动计算。sql能不能直接把Excel的计算过程给替换了?唉,你还真别说,Oracle提供了一个model子句,它还真能。

model子句可以让你将select查询出的rows作为多维数组,且能够随机访问该数组中的任意cell(即多维数组的构成元素,实质就是用一部分字段作为多维数组的下标索引,一部分字段作为数组的内容元素,这样就能实现类似Excel的灵活计算)。还可以指定若干单元格进行赋值,这被称为rules。

注意:当在查询中使用model子句时,select和order by子句必须只能使用那些在model子句中出现的column。

测试数据

测试数据如下,要计算一季度结束后,2025当年累计成本,相比去年同期,降低了多少。

字段包括:选厂factory、期间period、科目subject、成本cost

选厂:一选厂、二选厂

期间:2024-01、2024-02、2024-03、2025-01、2025-02、2025-03

科目:水、电

create table test (factory varchar2(100), period varchar2(7), subject varchar2(100), cost number);

insert into test(factory, period, subject, cost) values ('一选厂', '2024-01', '水',88 );

insert into test(factory, period, subject, cost) values ('一选厂', '2024-02', '水',87 );

insert into test(factory, period, subject, cost) values ('一选厂', '2024-03', '水',89 );

insert into test(factory, period, subject, cost) values ('一选厂', '2024-01', '电',99 );

insert into test(factory, period, subject, cost) values ('一选厂', '2024-02', '电',101 );

insert into test(factory, period, subject, cost) values ('一选厂', '2024-03', '电',98 );

insert into test(factory, period, subject, cost) values ('二选厂', '2024-01', '水',66 );

insert into test(factory, period, subject, cost) values ('二选厂', '2024-02', '水',67 );

insert into test(factory, period, subject, cost) values ('二选厂', '2024-03', '水',69 );

insert into test(factory, period, subject, cost) values ('二选厂', '2024-01', '电',77 );

insert into test(factory, period, subject, cost) values ('二选厂', '2024-02', '电',76 );

insert into test(factory, period, subject, cost) values ('二选厂', '2024-03', '电',78 );

insert into test(factory, period, subject, cost) values ('一选厂', '2025-01', '水',86 );

insert into test(factory, period, subject, cost) values ('一选厂', '2025-02', '水',87 );

insert into test(factory, period, subject, cost) values ('一选厂', '2025-03', '水',85 );

insert into test(factory, period, subject, cost) values ('一选厂', '2025-01', '电',99 );

insert into test(factory, period, subject, cost) values ('一选厂', '2025-02', '电',98 );

insert into test(factory, period, subject, cost) values ('一选厂', '2025-03', '电',96 );

insert into test(factory, period, subject, cost) values ('二选厂', '2025-01', '水',67 );

insert into test(factory, period, subject, cost) values ('二选厂', '2025-02', '水',65 );

insert into test(factory, period, subject, cost) values ('二选厂', '2025-03', '水',66 );

insert into test(factory, period, subject, cost) values ('二选厂', '2025-01', '电',75 );

insert into test(factory, period, subject, cost) values ('二选厂', '2025-02', '电',76 );

insert into test(factory, period, subject, cost) values ('二选厂', '2025-03', '电',74 );

commit;

具体实现

语句如下

效果如下

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 14:12:55

3步搞定Rustdesk服务器:零基础搭建专属远程控制平台

还在为复杂的远程桌面配置而头疼吗?Rustdesk服务器一键部署方案让你在短短几分钟内拥有完全自主掌控的远程访问系统。这款基于Rust语言开发的高性能解决方案,专为追求简单高效的用户设计,无论是个人远程办公还是企业IT管理,都能轻…

作者头像 李华
网站建设 2026/4/23 12:48:04

[技术讨论] 程序调试又出问题了?别慌,看看有没有你要的答案

“这个程序在旧板子上运行正常的,在新板子怎么不行?硬件上的修改点不会影响到软件呀,怎么回事?,我也是服了!”“我是参考MCU官方demo程序写的SPI从机驱动程序啊,数据接收怎么异常呢?…

作者头像 李华
网站建设 2026/4/23 12:13:06

【Cortex-Mx系列的SCB关键寄存器浅谈】之一:CPUID寄存器

在基于ARM Cortex-Mx(x>0)的嵌入式MCU软件开发中,有时候会经常遇到让人头疼的类似HardFault硬件故障的问题,这个时候你可能就需要使用SCB的一些关键寄存器来进行问题分析了。那究竟什么是SCB?SCB又有哪些关键寄存器…

作者头像 李华
网站建设 2026/4/23 13:38:47

三大AI编码模型实战对决:LeetCode经典难题暴露能力差距

三大AI编码模型实战对决:LeetCode经典难题暴露能力差距 【免费下载链接】Qwen3-30B-A3B-MLX-6bit 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-30B-A3B-MLX-6bit 在AI大模型爆发的当下,编码辅助工具已成为开发者的重要生产力伙伴。…

作者头像 李华
网站建设 2026/4/23 13:35:39

DOCX.js终极指南:浏览器端Word文档生成完整解决方案

DOCX.js终极指南:浏览器端Word文档生成完整解决方案 【免费下载链接】DOCX.js Generate Microsoft Word DOCX files in pure client-side JavaScript. Try in Chrome 项目地址: https://gitcode.com/gh_mirrors/do/DOCX.js 还在为Word文档生成而烦恼吗&#…

作者头像 李华
网站建设 2026/4/23 12:10:10

Delphi反编译终极教程:5步掌握Windows程序逆向分析核心技能

Delphi反编译终极教程:5步掌握Windows程序逆向分析核心技能 【免费下载链接】IDR Interactive Delphi Reconstructor 项目地址: https://gitcode.com/gh_mirrors/id/IDR IDR(Interactive Delphi Reconstructor)是一款专业的Delphi程序…

作者头像 李华