Em 19 de fevereiro de 2016 09:14, André Ormenese <aormen...@gmail.com>
escreveu:

>
>
>
>
>> 2016-02-18 17:32 GMT-02:00 André Ormenese <aormen...@gmail.com>:
>>
>>> Boa tarde pessoal.
>>>
>>> Vou dar um exemplo de consulta em cross-tab que gostaria de fazer, e
>>> vejam se é possível.
>>>
>>> Tenho duas tabelas, uma com código e descrição de produtos do sangue, e
>>> outra que armazena os dados de resultados de bolsas de sangue fracionada.
>>>
>>> Uma bolsa fracionada pode gerar um ou mais produtos.
>>>
>>> A tabela1 tem os dados :
>>> (código, descrição)
>>>     1 -      Hemacia
>>>     2 -      Plaqueta
>>>     3 -      Plasma
>>>
>>> A tabela2 o fracionamento de cada bolsa de sangue :
>>>  (bolsa, produto, qtdade)
>>>     b1        1          100
>>>     b1        2          135
>>>     b1        3          150
>>>     b2        1          200
>>>     b2        3          167
>>>
>>> Queria fazer uma consulta que me mostrasse os produtos na coluna correta
>>> do cross-tab, assim :
>>>
>>> Bolsa   Hemacia   Plaqueta   Plasma
>>>    b1        100           135          150
>>>    b2        200                          167
>>>
>>> Só consigo este resultado :
>>> Bolsa   Hemacia   Plaqueta   Plasma
>>>    b1        100           135          150
>>>    b2        200           167
>>>
>>>
>>> Estou executando :
>>>
>>> Select * from crosstab (
>>> 'select bolsa,produto,qtdade from fraciona
>>> inner join tproduto on tproduto.codigo = fraciona.produto
>>> order by bolsa') as resultado("Bolsa","Hemacia","Plaqueta","Plasma");
>>>
>>> A solução é fazer que a consulta interna do cross-tab gere uma linha
>>> assim :
>>>     b2        2          null
>>>
>>> Já tentei com right join mas não funcionou.
>>>
>>> Alguma ideia ?
>>>
>>>
>>>
> Em 18 de fevereiro de 2016 22:10, Matheus Ricardo Espanhol <
> matheusespan...@gmail.com> escreveu:
>
>> André,
>>
>> Faltou especificar a ordenação no segundo parâmetro do crosstab e
>> especificar descrição no lugar do produto:
>>
>> Select * from crosstab (
>>                                    $$select bolsa,*descricao*,qtdade
>> from fraciona
>>                                        inner join tproduto on
>> tproduto.codigo = fraciona.produto
>>                                        order by bolsa
>>                                    $$,
>>                                   * $$SELECT
>> unnest(ARRAY['Hemacia','Plaqueta','Plasma'])$$*
>>                                   ) as resultado ("Bolsa" text,"Hemacia"
>> int,"Plaqueta" int,"Plasma" int);
>>
>> Att.
>>
>
> Matheus,
>
> na verdade meu exemplo é mais complexo e esta segunda parte eu monto
> dinamicamente.
>
> Preciso mesmo é uma solução para a primeira parte do crosstab.
>
> Valeu a dica.
>
>
>>> Matheus,
me desculpe, é isso mesmo.... Agora que eu vi que estava faltando o segundo
parâmetro do crosstab !!!

Obrigado.
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a