Legal a solução mas se existir muitas cores vai ser necessário escrever um
gerador desse script, senão fica inviável. Além disso, para criar este
gerador é necessário capturar todas as cores possíveis, o que agrega mais
complexidade para este cenário da solução.

Em 28 de julho de 2015 13:09, Matheus de Oliveira <[email protected]
> escreveu:

>
> 2015-07-27 20:25 GMT-03:00 Stclara <[email protected]>:
>
>> Gostaria de saber se alguém já recebeu um pedido destes e como conseguiu
>> resolver:
>> - Uma tabela com os campos nome e cores;
>> - Ex:
>> nome                               cores
>> carlos                           azul, vermelho, amarelo
>> josé                               branco, cinza, azul
>> antonio                        amarelo, azul, roxo
>>
>> - Agora preciso montar uma consulta que me retorne:
>>
>> azul        vermelho    amarelo      branco     cinza         roxo
>> carlos       carlos         carlos          josé josé        antonio
>> josé                              antonio
>> antonio
>>
>
> Tem várias formas, isso é semelhante com conceito de PIVOT ou crosstab. O
> problema maior no seu caso é que não tem uma grupo claro. Se você estiver
> usando versão 9.4 ou superior, então eu penso na seguinte solução (não sei
> dizer se a melhor):
>
>     CREATE TEMP TABLE foo(nome text, cor text);
>
>     INSERT INTO foo VALUES('carlos', 'azul'),('carlos',
> 'vermelho'),('carlos', 'amarelo'),('josé',
> 'branco'),('josé','cinza'),('josé','azul'),('antonio','amarelo'),('antonio','azul'),('antonio','roxo');
>
>     WITH nomes AS (
>         SELECT
>             array_agg(nome) FILTER(WHERE cor = 'azul') AS azul,
>             array_agg(nome) FILTER(WHERE cor = 'vermelho') AS vermelho
>         FROM foo
>     )
>     SELECT u.* FROM nomes n, unnest(n.azul, n.vermelho) AS u(azul,
> vermelho);
>
> Essa consulta usa duas novidades da versão 9.4, primeiro usa o FILTER para
> agregar em arrays os nomes que estão em cada cor, depois usa o unnest com
> dois parâmetros (unnest com mais de um parâmetro é da 9.4) que já traz o
> resultado exatamente como você espera.
>
> Fiz somente para vermelho e azul, mas é só expandir para as demais cores.
>
> Atenciosamente,
> --
> Matheus de Oliveira
>
>
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>


-- 
 Tarcísio Martins Ferreira
 Analista Desenvolvedor de Sistemas
 Bacharel em Ciência da Computação, FACOM <http://www.portal.facom.ufu.br/>/UFU
<http://www.ufu.br>
<http://www.ufu.br>
 Mestrando em Engenharia de Software, FACOM
<http://www.facom.ufu.br/posgrad/>/UFU <http://www.ufu.br>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a