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

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

相关推荐
程序员塔塔喵2 分钟前
【MySQL篇|第三篇】脏读,幻读,不可重复读
数据库·mysql·不可重复读·幻读·脏读
乌暮16 分钟前
综合案例:宠物电商系统
java·开发语言·spring·mvc·restful·1024程序员节
大文说跨境17 分钟前
亚马逊多店铺的图片素材怎么批量去重:EXIF 与哈希的处理流程
开发语言·php
西索斯coding27 分钟前
Qwen3-Max 与 Qwen-Plus:60 个真实修复任务评测方案
大数据·网络·算法·ai
龙亘川27 分钟前
适应人工智能发展、构建就业友好型发展方式
大数据·运维·人工智能·信息可视化·智慧城市
数据库小学妹29 分钟前
OLAP数据库怎么选、怎么优化?路线、提速与边界
运维·数据库·后端
瓶瓶持续学习中35 分钟前
数字孪生与空间智能技术架构解析:五类厂商路线及选型方法
大数据·网络·架构
实验室管理云平台35 分钟前
某国家重点实验室应用经费合同管理系统,实现经费实时监控
大数据·人工智能
织码weavecodes38 分钟前
新闻资讯模块设计:内容发布、阅读计数与附件鉴权
java·服务器·数据库
小羊没烦恼!1 小时前
分布式事务 | 使用DTM 的Saga 模式
java·linux·运维·数据库·wpf