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;

具体实现

语句如下

效果如下

相关推荐
专注API从业者几秒前
淘宝商品详情 API 与爬虫技术的边界:合法接入与反爬策略的技术博弈
大数据·数据结构·数据库·爬虫
爱码小白8 分钟前
MySQL 单表查询练习题汇总
数据库·python·算法
WangJunXiang610 分钟前
第09章:PostgreSQL日常维护
数据库·postgresql
三道渊30 分钟前
进程通信与网络协议
开发语言·数据库·php
徒 花33 分钟前
数据库知识复习05
android·数据库
流觞 无依34 分钟前
DedeCMS plus/download.php SQL注入漏洞修复教程
sql·php
豆沙糕34 分钟前
RAG文档切分最佳实践:企业级方案+主流策略+生产落地
数据库·人工智能
不会写DN36 分钟前
SQL 多表操作全解
数据库·sql
爱莉希雅&&&39 分钟前
linux中MySQL数据库备份恢复的四种方法(更新中)
linux·数据库·mysql·数据库备份·mysqldumper
云边有个稻草人1 小时前
时序数据库选型技术剖析:从写入、存储到查询的五个关键维度
数据库