Как объединить строку с результатом listagg в красном смещении? - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь использовать LISTAGG в Redshift для агрегирования данных, а затем объединить строку с результатом LISTAGG.

tmp_table:
Col1 Col2
1    A
1    B
1    C
2    A
2    B

Я бы хотел сделать что-то вроде этого:

CREATE TABLE new_table AS (
SELECT 
   Col1, 
   '{"results" : "' || LISTAGG(Col2, ',') WITHIN GROUP (ORDER BY Col1) || '"}' as list_result
FROM 
   tmp_table 
GROUP BY 
    1 
)

С идеальным результатом, похожим на это:

new_table:
Col1 Col2
1    {"results" : "A,B,C"}
2    {"results" : "A,B"}

Запуск без конкатенированных строк работает нормально, но как только я конкатенирую строку, я получаю:

ERROR:  Column length exceeds maximum allowed (maximum column length is 65535)

Я уверен, что это не превышает длину столбца, так как я проверил длину самого длинного результата LISTAGG, и это всего 30 символов. Я также пытался разыграть результат LISTAGG как VARCHAR (MAX), но безуспешно.

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Работает ли это, если вы конвертируете в строку другой длины?

CREATE TABLE new_table AS (
    SELECT Col1, 
           '{"results" : "' || CAST(LISTAGG(Col2, ',') WITHIN GROUP (ORDER BY Col1) as VARCHAR(255)) || '"}' as list_result
    FROM tmp_table 
    GROUP BY 1 ;
0 голосов
/ 22 мая 2019

Мне кажется, проблема в том, что LISTAGG автоматически создает столбец с максимальной длиной 65535, поэтому, если вы объедините что-то с ним, это выдаст вам ошибку.

...