Somatória de Totais em SQL
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.
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
Curtidas 0
Respostas
Emerson Nascimento
18/05/2006
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?
GOSTEI 0
Salupe
18/05/2006
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.
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.
GOSTEI 0
Martins
18/05/2006
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.
GOSTEI 0
Emerson Nascimento
18/05/2006
a instrução parece estar correta.
talvez o problema esteja no relacionamento das tabelas.
essa é a mesma instrução, somente a reescrevi de uma forma mais legível pra mim.
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.
GOSTEI 0
Salupe
18/05/2006
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.
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.
GOSTEI 0
Emerson Nascimento
18/05/2006
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
GOSTEI 0
Salupe
18/05/2006
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.
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.
GOSTEI 0
Emerson Nascimento
18/05/2006
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...
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...
GOSTEI 0
Salupe
18/05/2006
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.
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.
GOSTEI 0
Salupe
18/05/2006
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.
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.
GOSTEI 0