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

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

相关推荐
ACP广源盛139246256731 分钟前
GSV2231 三屏显示扩展芯片@ACP#RTX Spark AI 终端多屏协作专属解决方案
大数据·人工智能·分布式·信息可视化·spark·电脑·音视频
C137的本贾尼6 分钟前
JDBC 编程:用 Java 连接 MySQL
java·开发语言·mysql
2501_933670798 分钟前
高中物理成绩优异,适合报考大数据哪个细分专业
大数据
无忧智库9 分钟前
破局“数据孤岛”与“面子工程”:万字深度解构新型智慧城市“云数智”融合的底层逻辑与实战路径(PPT)
大数据·人工智能·智慧城市
AI视觉网奇10 分钟前
three-bvh-csg glb分割
开发语言·前端·javascript
牢姐与蒯12 分钟前
c++数据结构之c++11(二)
开发语言·c++
我是一颗柠檬13 分钟前
【Redis】Redis性能优化Day14(2026年)
数据库·redis·性能优化
z2005093015 分钟前
【linux学习】深入理解 Linux 进程间通信:管道的艺术与实现
linux·开发语言
lcj251116 分钟前
【stack、queue、deque、priority_queue】C++ 栈 / 队列 / 优先级队列全解析!手撕实现 + 二叉树层序遍历(附源码)
开发语言·c++·笔记
程序员老油条19 分钟前
用 AI 生成复杂 SQL:LangChain4j + 本地模型实践
数据库·人工智能·sql