> 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.


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

Reply via email to