Как разделить запись на несколько записей, основываясь на количестве вхождений агрегированного поля списка в Redshift SQL - PullRequest
0 голосов
/ 07 февраля 2019

Я на 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*

Правила таковы: а) Может быть любойколичество вхождений AggColA & AggColB для одной и той же комбинации ColA, ColB, ColC b) Нам нужно сгруппироваться по ColA, ColB и ColC и объединить AggColAи AggColB в новый столбец AggColAB, который будет иметь следующий формат:

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

c) Если имеется более 2 вхождений AggColA & AggColB для одного и того же значения ColA, ColB и ColC, затем нам нужно записать из 3-го вхождения в новую запись в том же формате, как описано выше.Это должно быть сделано для каждого 3-го вхождения 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

Однако я не могу понятькак выполнить Правило # c с помощью Redshift SQL и разбить 3-е вхождение на отдельную запись.

Пожалуйста, помогите!Заранее спасибо.

...