[firebase-br] Dificuldade com union e group by

Paulo Sergio Xavier Soares paulosoares.br em gmail.com
Seg Dez 17 10:52:00 -03 2007


Tente assim:

select c.codigo, c.desc, sum(i.qtd * i.valor + s.qtd * s.valor + e.qtd *
e.valor) as "valor"
     from item i
          inner join cliente c on c.codigo = i.codcli
               left join item_servico s on c.codigo = s.codcli
               left join item_escalonamento e on c.codigo = e.codcli
          group by 1,2

Dica: Procure fazer das queries uma tradução natural do seu raciocínio. Por
exemplo, se entendi bem, você quer uma totalização por cliente, logo, na
lógica da query, o ideal é referenciar a tabela Cliente como a principal,
assim:

select c.codigo, c.desc, sum(i.qtd * i.valor + s.qtd * s.valor + e.qtd *
e.valor) as "valor"
     from cliente c
          left join item i on c.codigo = i.codcli
          left join item_servico s on c.codigo = s.codcli
          left join item_escalonamento e on c.codigo = e.codcli
          group by 1,2


Em 14/12/07, Wagner Porto <wagner.porto em itelefonica.com.br> escreveu:
>
> Preciso de ajuda para realizar um busca com calculos de
> qtd * valor em 3 tabelas diferentes, porém não estou conseguindo agrupar.
>
> Ex.
> select c.codigo, c.desc, sum(i.qtd * i.valor) as "valor"
> from item i
> join cliente c on c.codigo = i.codcli
> group by 1,2
> union
> select c.codigo, c.desc, sum(s.qtd * s.valor) as "valor"
> from item_servico s
> join cliente c on c.codigo = s.codcli
> group by 1,2
> union
> select c.codigo, c.desc, sum(e.qtd * e.valor) as "valor"
> from item_escalonamento e
> join cliente c on c.codigo = e.codcli
> group by 1,2
>
> essa consulta deveria ter o seguinte resultado
>
> 1  - cliente 0001 - 100,00
> 2  - cliente 0002 - 105,00
> 3  - cliente 0003 - 250,00
>
> porém ela me retorna
>
> 1  - cliente 0001 - 40,00
> 1  - cliente 0001 - 60,00
> 2  - cliente 0002 - 10,00
> 2  - cliente 0002 - 95,00
> 3  - cliente 0003 - 250,00
> 3  - cliente 0003 - 50,00
>
> se fizer com union all, aparece somente o ultimo registro de cada cliente
>
> 1  - cliente 0001 - 60,00
> 2  - cliente 0002 - 95,00
> 3  - cliente 0003 - 50,00
>
> Desde já agradeço a atenção.
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço
> http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
___________________________________
*** Paulo Sergio Xavier Soares ***
Skype: Allumo, E-mail: paulosoares.br em gmail.com, MSN: paulosxs em yahoo.com.br
Consultor em Informatica
Matematica - UEM

Obs: Se o seu leitor de e-mail não estiver configurado para emitir resposta
automática do recebimento, favor responder essa mensagem para o confirmar.



Mais detalhes sobre a lista de discussão lista