我正在使用Redshift,并且尝试使用Redshift SQL解决以下问题。我有一个具有以下结构的表:
Record 1
ColA: 1
ColB: 2
ColC: 3
AggColA: A1B1
AggColB: 1
Record 2
ColA: 1
ColB: 2
ColC: 3
AggColA: A1B2
AggColB: 1
Record 3
ColA: 1
ColB: 2
ColC: 3
AggColA: A1B3
AggColB: 2
Record 4
ColA: 1
ColB: 2
ColC: 3
AggColA: A1B4
AggColB: 3
我希望达到以下结果:
Record 1
ColA: 1
ColB: 2
ColC: 3
AggColBA: 1*A1B1*1*A1B2*
Record 2
ColA: 1
ColB: 2
ColC: 3
AggColBA: 2*A1B3*3*A1B4*
规则如下:
a)对于AggColA
,AggColB
,ColA
的相同组合,可以出现ColB
和ColC
的任何次数
b)我们需要将ColA
,ColB
和ColC
分组,并将AggColA
和AggColB
连接到新列AggColAB
中,该列将具有格式如下:
AggColB*AggCola*AggColB*AggCola*AggColB*AggCola ..........
c)如果AggColA
和AggColB
和ColA
的相同值出现ColB
和ColC
超过2次,则我们需要从第三次出现以上述相同格式写入新记录。应该对AggColA
和AggColB
截至目前,我可以通过使用如下查询来实现规则#a和#b:
我能够实现规则#a和规则#b,如下所示:
select ColA, ColB, ColC,
listagg(AggColB||'*'||AggColA,'*')
within group (order by AggColA) as AggColBA
from stage.raw_data_from_mf
group by ColA, ColB, ColC
查询的输出如下:
ColA: 1
ColB: 2
ColC: 3
AggColBA: 1*A1B1*1*A1B2*2*A1B3
但是,我无法理解如何使用Redshift SQL实现Rule#c并从第三次出现分解为单独的记录。
请帮助!预先感谢。