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

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

下载试用

猜你喜欢

转载自blog.csdn.net/smilejingwei/article/details/142983039