Fórum Somatória de Totais em SQL #321639

18/05/2006

0

Oi Uso Delphi 6 e Firebird 1.5 com paleta interbase

Estou precisando fazer uma consulta onde me apresente o valor total de uma movimentação, fazendo a somatória do total de todos os itens dela, algo como do tipo:

select sum(ItemOrcamento.Quantidade * MapaPrecos.Preco) Soma
from MapaPrecos, ItemOrcamento
where ItemOrcamento.CodOrcamento = MapaPrecos.Codorcamento
and ItemOrcamento.CodFilial = MapaPrecos.CodFilial
and ItemOrcamento.Item = MapaPrecos.Item
group by MapaPrecos.CodOrcamento, MapaPrecos.CodFilial

Alguem tem alguma ideia de como poderia fazer essa somatoria, coloquei um pedaço do que eu tentei pois tenho que fazer a mesma soma pra 5 precos diferentes na mesma sql.

Agradeço antecipadamente qualquer ajuda.


Salupe

Salupe

Responder

Posts

18/05/2006

Emerson Nascimento

explique melhor o que você precisa. e porque a instrução acima não funcionou? o resultado não era o esperado? deu erro na execução?


Responder

Gostei + 0

18/05/2006

Salupe

Eu tenho que fazer a somatoria dos totais dos produtos, ou seja, multiplicar a quantidade pelo valor de cada item, fazendo a somatória para dar o valor do orçamento.

Eu tinha colocado somatória em outras tabelas e buscava o campo que foi indicado como saida da soma e ele me mostrava o valor correto, mas nesse caso ele me retorna zero, se retirar a multiplicação ele mostra a somatória mas de um campo apenas.

Agradeço antecipadamente qualquer ajuda.


Responder

Gostei + 0

18/05/2006

Martins

Eu tenho que fazer a somatoria dos totais dos produtos, ou seja, multiplicar a quantidade pelo valor de cada item, fazendo a somatória para dar o valor do orçamento. Eu tinha colocado somatória em outras tabelas e buscava o campo que foi indicado como saida da soma e ele me mostrava o valor correto, mas nesse caso ele me retorna zero, se retirar a multiplicação ele mostra a somatória mas de um campo apenas. Agradeço antecipadamente qualquer ajuda.


Para q possamos ter um idéia mais próxima de sua realidade, exponha alguns dados mesmo q não reais, tipo


preco ------ quant
12,00 ------ 4
  6,00 ------ 3


algo mais ou menos assim.


Responder

Gostei + 0

18/05/2006

Emerson Nascimento

a instrução parece estar correta.
talvez o problema esteja no relacionamento das tabelas.
select
  ItOrc.CodOrcamento, ItOrc.CodFilial,
  sum(ItOrc.Quantidade * coalesce(MpPrc.Preco,0)) Soma
from
  ItemOrcamento ItOrc
left join
  MapaPrecos MpPrc on
    (MpPrc.CodOrcamento = ItOrc.CodOrcamento and
     MpPrc.CodFilial = ItOrc.CodFilial and
     MpPrc.Item = ItOrc.Item)
group by
  ItOrc.CodOrcamento, ItOrc.CodFilial

essa é a mesma instrução, somente a reescrevi de uma forma mais legível pra mim.


Responder

Gostei + 0

18/05/2006

Salupe

Eu tenho um orçamento e tenho que fazer um mapa de preços concorrentes pra poder depois indicar qual o menor preço, mas isso é outra situação. Isso dá a tabela mais ou menos assim

codpro - preco - preco1 - preco2 - preco3 - preco4 - preco5
1 - 1,0 - 1,5 - 1,3 - 0,9 - 1,4 - 1,25
2 - 10,0 - 15,0 - 10,5 - 12,3 - 13,4 - 12,0

essa seria a tabela do mapa de precos, logico que tendo o a mais a indicação do codigo do orcamento, filial e codigo dos concorrentes.
em outra tabela tenho os dados do orcamento com os produtos e as quantidades de cada um, que é de onde eu queria pegar a quantidade do produto e multiplicar pelo preço indicado no mapa de preços fazendo o total de cada produto e conseguir chegar na somatória do orçamento de cada concorrente.

Agradeço antecipadamente qualquer ajuda e desculpe se não estou conseguindo passar direito o que preciso.


Responder

Gostei + 0

18/05/2006

Emerson Nascimento

não sei se eu entendi, mas tente algo assim:
select 
  ItOrc.CodOrcamento, ItOrc.CodFilial, 
  sum(ItOrc.Quantidade * coalesce(MpPrc.Preco,0)) Soma,
  sum(ItOrc.Quantidade * coalesce(MpPrc.Preco1,0)) Soma1,
  sum(ItOrc.Quantidade * coalesce(MpPrc.Preco2,0)) Soma2,
  sum(ItOrc.Quantidade * coalesce(MpPrc.Preco3,0)) Soma3,
  sum(ItOrc.Quantidade * coalesce(MpPrc.Preco4,0)) Soma4,
  sum(ItOrc.Quantidade * coalesce(MpPrc.Preco5,0)) Soma5
from 
  ItemOrcamento ItOrc 
left join 
  MapaPrecos MpPrc on 
    (MpPrc.CodOrcamento = ItOrc.CodOrcamento and 
     MpPrc.CodFilial = ItOrc.CodFilial and 
     MpPrc.CodPro = ItOrc.CodPro) 
group by 
  ItOrc.CodOrcamento, ItOrc.CodFilial



Responder

Gostei + 0

18/05/2006

Salupe

Não sai.

O Valor que ele demonstra é sempre 0.

Existe algum jeito diferente será de se chegar a esse resultado, sem ter que fazer um while do ou qualquer outra estrutura de loop.

Aproveitando qual a diferença entre left join e inner join.

Agradeço antecipadamente qualquer ajuda.


Responder

Gostei + 0

18/05/2006

Emerson Nascimento

os dados estão gravados corretamente nas tabelas?
existe mapa de preços para o orcamento? paa o item do orçamento?

se você quiser, mande seu BD pra eu dar uma olhada...


Responder

Gostei + 0

18/05/2006

Salupe

Fiz uns testes por fora e a rotina fez certo e trouxe o valor que eu queria, mas na hora de demonstrar o valor é que não traz.

Faço assim depois do open pra colocar no label:


Label8.Caption := FormatCurr(´,0.00´, QueMapaSOMA.Value);

o soma na query é um campo calculado, só que na hora de colocar o valor fica 0.

Meu bd tá com mais de 100MB mas os valores estão corretos, pois fazendo um loop eu consigo o valor que eu quero, mas fica muito lento, em torno de 5 segundo dependendo da quantidade de itens.

Alguma ideia do porque?

Agradeço antecipadamente qualquer ajuda.


Responder

Gostei + 0

18/05/2006

Salupe

Achei o erro.

Não sabia que o nome que tem é colocado fora da soma tem que ser um campo existente da tabela e não pode ser um calculado.

Obrigado pela ajuda.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar