2015-07-27 20:25 GMT-03:00 Stclara <stcl...@gmail.com>: > 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 pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral