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;

具体实现

语句如下

效果如下

相关推荐
GentleDevin5 分钟前
Redis服务常用命令
数据库·oracle
難釋懷11 分钟前
Redis分片集群手动故障转移
数据库·redis·缓存
无名-CODING17 分钟前
从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(上):环境搭建与数据库容器化
数据库·spring boot·docker
Bdygsl29 分钟前
MySQL(2)—— CRUD
数据库·mysql
chushiyunen34 分钟前
python edge-tts实现tts文本转语音、音频
数据库·python·音视频
原来是猿39 分钟前
MySQL【事务中 - 事务的隔离级别】
数据库·mysql
2501_945423541 小时前
游戏与图形界面(GUI)
jvm·数据库·python
大傻^1 小时前
Spring AI Alibaba Agent开发:基于ChatClient的智能体构建模式
java·数据库·人工智能·后端·spring·springaialibaba
爬山算法1 小时前
MongoDB(50)副本集中的角色有哪些?
数据库·mongodb
大傻^1 小时前
Spring AI Alibaba 向量数据库集成:Milvus与Elasticsearch配置详解
数据库·人工智能·spring·elasticsearch·milvus·springai·springaialibaba