如何根据Redshift SQL中列表聚合字段的出现次数将记录拆分为多个记录

时间:2019-02-07 16:30:18

标签: sql amazon-redshift

我正在使用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)对于AggColAAggColBColA的相同组合,可以出现ColBColC的任何次数 b)我们需要将ColAColBColC分组,并将AggColAAggColB连接到新列AggColAB中,该列将具有格式如下:

AggColB*AggCola*AggColB*AggCola*AggColB*AggCola ..........

c)如果AggColAAggColBColA的相同值出现ColBColC超过2次,则我们需要从第三次出现以上述相同格式写入新记录。应该对AggColAAggColB

的第3次出现进行此操作

截至目前,我可以通过使用如下查询来实现规则#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并从第三次出现分解为单独的记录。

请帮助!预先感谢。

0 个答案:

没有答案