分组汇总后按指定序列对齐

复制代码
Oracle数据的temp_data表如下。

|---------------------|--------|
| TRANSACT_DT_TM | LETTER |
| 2023-01-01 00:00:00 | K |
| 2023-01-02 00:00:00 | K |
| 2023-01-02 00:00:00 | L |
| 2023-01-03 00:00:00 | Q |
| 2024-01-02 00:00:00 | Y |
| 2024-01-03 00:00:00 | B |

复制代码
temp_data表的LETTER字段是外键,指向temp_ref表的LETTER字段。temp_ref表的LETTER_SEQ规定了LETTER的顺序。

|--------|------------|
| LETTER | LETTER_SEQ |
| Y | 10 |
| B | 20 |
| Q | 30 |
| K | 40 |
| L | 50 |

复制代码
要求:对temp_data按照年份和LETTER分组,对记录数计数,再按照年份、LETTER的叉乘对齐,对不上则为null。叉乘时年份按时间顺序排列,LETTER按LETTER_SEQ的顺序排列。

|------|--------|-----|
| YEAR | LETTER | CNT |
| 2023 | Y | |
| 2023 | B | |
| 2023 | Q | 1 |
| 2023 | K | 2 |
| 2023 | L | 1 |
| 2024 | Y | 1 |
| 2024 | B | 1 |
| 2024 | Q | |
| 2024 | K | |
| 2024 | L | |

编写SPL代码:

|---|---------------------------------------------------------------------------------------------------------------------------------------|
| | A |
| 1 | =orcl.query("select to_char(TRANSACT_DT_TM,'YYYY') , LETTER,count(1) from temp_data group by to_char(TRANSACT_DT_TM,'YYYY'), LETTER") |
| 2 | =orcl.query("select LETTER from temp_ref order by LETTER_SEQ") |
| 3 | =xjoin(A1.id(#1):YEAR;A2:LETTER).join(#1:#2,A1:#1:#2,#3:CNT) |

A1、A2:执行简单SQL,对temp_data分组汇总;按顺序取出 LETTER。

A3:先叉乘,再外键式关联 A1。#1 表示第 1 个字段。

开源SPL 源码地址

相关推荐
papership44 分钟前
【入门级-C++程序设计:12、文件及基本读写-文件的基本概念&文本文件的基本操作】
开发语言·c++·青少年编程
GIS之路2 小时前
GeoTools 基础概念解析
数据库·设计模式·oracle
SaleCoder2 小时前
用Python构建机器学习模型预测股票趋势:从数据到部署的实战指南
开发语言·python·机器学习·python股票预测·lstm股票模型·机器学习股票趋势
NetX行者5 小时前
.NET 9 GUID v7 vs v4:时间有序性如何颠覆数据库索引性能
数据库·mysql·abp vnext
sunon_5 小时前
实现druid数据源密码加密
数据库
sevevty-seven6 小时前
Redis中的红锁
数据库·redis·php
玩代码7 小时前
备忘录设计模式
java·开发语言·设计模式·备忘录设计模式
技术猿188702783518 小时前
实现“micro 关键字搜索全覆盖商品”并通过 API 接口提供实时数据(一个方法)
开发语言·网络·python·深度学习·测试工具
放飞自我的Coder8 小时前
【colab 使用uv创建一个新的python版本运行】
开发语言·python·uv
GoodStudyAndDayDayUp8 小时前
dbever 导出数据库表的建表语句和数据插入语句
数据库