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

复制代码
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 源码地址

相关推荐
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
叶智辽1 天前
【Three.js内存管理】那些你以为释放了,其实还在占着的资源
性能优化·three.js
BigByte2 天前
我用 6 个 WASM 编码器干掉了 Canvas.toBlob(),图片压缩率直接提升 15%
性能优化·webassembly·图片资源
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
武子康2 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
DemonAvenger3 天前
Kafka性能调优:从参数配置到硬件选择的全方位指南
性能优化·kafka·消息队列
桦说编程3 天前
实战分析 ConcurrentHashMap.computeIfAbsent 的锁冲突问题
java·后端·性能优化
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
武子康3 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive