Administração do sistema
SQL - Como criar uma expressão SQL que retorna uma lista de valores concatenados de uma subquery?
RT.FAQ-8252
No PostgreSQL É possível criar um item UNBOUND do tipo SQL_EXPRESSION contendo uma expressão que forma uma lista de valores agregados resultantes de uma sub-query.
Exemplo:
select array_to_string(array_agg(c.cidade),', ')
from cidades c
where c.estado_id = base.id;
(considerando a entidade base seja ESTADOS)
Para "explodir" o array, segue o exemplo abaixo:
select unnest(a.arr) from
(
select string_to_array(check_list,chr(13)) as arr
from tipos_pedidos
where check_list is not null limit 1
) a ;
O atributo check_list é um texto com valores separados pelo caracter "enter" (chr(13)).
O resultado do select acima é a lista de todos os valores um abaixo do outro.
Outro exemplo:
select array_to_string(array_agg(linha),'; ')
from (
select '[ ] ' || unnest(a.arr) as linha
from (
select string_to_array('TESTE'||chr(10)||'TESTE2'||chr(10)||'TESTE3',chr(10)) as arr
) a
) sub;
Transformar colunas em linhas:
select key, unnest(arr1) as coluna, unnest(arr2) as valor
from (
select key
, array['planejado', 'efetivo'] as arr1
, array[planejado, efetivo] as arr2
from (
select 'abc' as key, 1 as planejado, 2 as efetivo
union all
select 'def' as key, 1 as planejado, 2 as efetivo
union all
select 'ghi' as key, 1 as planejado, 2 as efetivo
) q
) q