Fórum soma IBOQUERY com duplicidade #502411

25/11/2014

0

help.....
estou usando DELPHI e FIREBIRD

tenho uma tabela com CODIGO QUANTIDADE EMISSAO
tenho outra tabela com CODIGO QUANTIDADE DATA

preciso DEFINIR POR PERIODO, CODIGO e somar as quantidades das duas tabelas
estou usando IBOQUERY

UNION / UNION ALL/ INNER JOIN as funções monstram valores errados e duplicados

alguém pode me socorrer....
obrigada
Cristiane

Cristiane

Responder

Post mais votado

25/11/2014

Buenas,

Caso as tabelas não tenham relacionamento e você apenas precise da soma das quantidades independentes, segue um exemplo de um UNION ALL do SUM() de cada tabela resultando um sub-select para um novo SUM()

SELECT
 SUM(SOMA)
FROM
(
SELECT
 SUM(TAB1.QUANTIDADE) SOMA
FROM TABELA1 TAB1
 WHERE TAB1.CODIGO BETWEEN 1 AND 10
 AND  TAB1.EMISSAO BETWEEN '01.11.2014' AND '25.11.2014'
UNION ALL
SELECT
 SUM(TAB2.QUANTIDADE) SOMA
FROM TABELA2 TAB2
 WHERE TAB2.CODIGO BETWEEN 1 AND 10
 AND  TAB2.DATA BETWEEN '01.11.2014' AND '25.11.2014'
)


Abraççç,
rrubinho

Renato Rubinho

Renato Rubinho
Responder

Gostei + 1

Mais Posts

25/11/2014

Cristiane

rrubinho


obrigada pela atenção

copiei seu code, esta dando erro
usei parte dele assim:

SELECT T1.CODIGO, SUM(T1.QTD) AS TOT1 FROM ITEVENDAS T1
GROUP BY T1.CODIGO
UNION ALL
SELECT T2.CODIGO, SUM(T2.QTD) AS TOT2 FROM ITEVENDAS_ECF T2
GROUP BY T2.CODIGO

resultado
so aparece a soma da primeira tabela
estou fazendo uma consulta, no dbgrid so aparece o TOT1

são duas tabelas uma de nota fiscal e outra de cupom fiscal
preciso fazer uma consulta definindo um período x onde some todas as vendas do produto tanto da nota fiscal quanto do ecf
tem situação em que existe venda de nota fiscal e não tem de cupom fiscal e vice versa

estou a uma semana tentando montar esta consulta e não consigo, usei o INNER JOIN além de duplicar ele soma errado

se vc puder me ajudar.... agradeço imensamente....
Responder

Gostei + 0

25/11/2014

Renato Rubinho

Só escrevi os comandos sem testar. Que erro deu ?

O comando que você fez irá resultar duas linhas.
Precisa utilizá-lo como uma sub-query e dar um sum das quantidades de novo.
Obs: os alias que você colocar tem que ser os mesmos para as quantidades, conforme abaixo.

SELECT 
SUM(TOT)
FROM
(
SELECT T1.CODIGO, SUM(T1.QTD) AS TOT FROM ITEVENDAS T1
GROUP BY T1.CODIGO
UNION ALL
SELECT T2.CODIGO, SUM(T2.QTD) AS TOT FROM ITEVENDAS_ECF T2
GROUP BY T2.CODIGO
)
GROUP BY CODIGO


Abraççç
rrubinho
Responder

Gostei + 1

25/11/2014

Cristiane

rrrubinho

o erro eu encontrei foi na digitação do código...
eu gerei com o seu código ele gerou um compo com o total geral vendido
a questão eh:

preciso jogar num gráfico, os itens mais vendidos de um período
tenho duas tabelas
itevendas (CODIGO/EMISSAO/QTD)
itevendas_ecf (CODIGO/DATA/QTD)

preciso agrupar por código somando o total ITEVENDAS.qtd+ITEVENDAS_ECF.qtd
vou testar o código que vc postou agora...

te retorno o resultado ok...
obg
Responder

Gostei + 0

25/11/2014

Cristiane

ele esta me retornando somente um registro com o total
preciso que ele some por produto para lancar no gráfico dbchart

ex.

t1
código 1 / 2 / 25
qtd 10 / 5 / 1
data 01/01/2014 / 02/01/2014 / 03/01/2014

t2
código 1 / 5/ 10
qtd 2 / 3 / 4
emissão 01/01/2014 / 02/05/2014 / 03/06/2014

definindo o período 01/01/2014 a 25/11/2014

ficaria um resultado

código 1 total 12
código 2 total 5
código 25 total 1
código 5 total 3
código 10 total 4

com seu ultimo código, ele continua me retornando um total unico
Responder

Gostei + 0

26/11/2014

Renato Rubinho

Bom dia Cristiane,

Sinceramente, não sei o que está fazendo de diferente.
Simulei criando as tabelas, preenchendo com as informações que você passou e gerou o resultado esperado.

[img:descricao=ITEVENDAS]http://arquivo.devmedia.com.br/forum/imagem/379321-20141126-075604.jpg[/img]

[img:descricao=ITEVENDAS_ECF]http://arquivo.devmedia.com.br/forum/imagem/379321-20141126-075621.jpg[/img]

SELECT 
CODIGO,
SUM(TOT)
FROM
(
SELECT T1.CODIGO, SUM(T1.QTD) AS TOT FROM ITEVENDAS T1
GROUP BY T1.CODIGO
UNION ALL
SELECT T2.CODIGO, SUM(T2.QTD) AS TOT FROM ITEVENDAS_ECF T2
GROUP BY T2.CODIGO
)
GROUP BY CODIGO


[img:descricao=Resultado]http://arquivo.devmedia.com.br/forum/imagem/379321-20141126-075749.jpg[/img]

Abraççç,
rrubinho
Responder

Gostei + 1

26/11/2014

Cristiane

rrubinho

obrigada.....vc me ajudou muitooooo....
eu não estava colocando CODIGO no primeiro SELECT

se possível, preciso de mais uma ajuda.

na tabela ITEVENDAS tenho o campo EMISSAO
na tabela ITEVENDAS_ECF tenho o campo DATA

preciso além do agrupamento de total por código, preciso filtrar pelo período nas duas tabelas
Responder

Gostei + 0

26/11/2014

Cristiane

rrubinho

fiz duas alterações no código, coloquei o FIRST 5 para pegar os 5 primeiros registros e coloquei BETWEEN por tabela buscar o período, funcionou

estou tentando colocar em ordem decrescente por total para pegar os 5 mais vendidos, mas quando coloco ORDER BY TOT ele da erro
o que estou fazendo de errado?


CODE

SELECT FIRST 5
CODIGO,
SUM(TOT)
FROM
(
SELECT T1.CODIGO, SUM(T1.QTD) AS TOT FROM ITEVENDAS T1
WHERE T1.EMISSAO BETWEEN '01.01.2000' AND '01.12.2014'
GROUP BY T1.CODIGO
UNION ALL
SELECT T2.CODIGO, SUM(T2.QTD) AS TOT FROM ITEVENDAS_ECF T2
WHERE T2.DATA BETWEEN '01.01.2000' AND '01.12.2014'
GROUP BY T2.CODIGO
)
GROUP BY CODIGO
Responder

Gostei + 0

26/11/2014

Renato Rubinho

Duas opções:

ORDER BY SUM(TOT) DESC
ou
ORDER BY 2 DESC

Abraççç,
rrubinho
Responder

Gostei + 1

26/11/2014

Cristiane

rrubinho

ok.....funcionou a order


este resultado estou colocando num dbchart
qdo defino o valor aparece "SUM" que eh a soma que utilizamos ok?
porem ele da erro ao executar

preciso passar de outra forma?
Responder

Gostei + 0

26/11/2014

Renato Rubinho

Não uso dbchart. Não sei dizer o porque do erro.
Aparece como SUM porque você não atribuiu um alias para ele no select principal.
Tenta assim no comando para ver se não é esse o problema:

SELECT FIRST 5
CODIGO, 
SUM(TOT)  TOT  <<<---
FROM 


Senão, posta o erro que dá para ver se pelo erro é possível identificar o que está ocorrendo ou outras pessoas que usam o dbchart possam te ajudar.
Responder

Gostei + 1

26/11/2014

Cristiane

rrrubinho

funcionou assim...

SELECT FIRST 5
CODIGO,
SUM(TOT) AS TOT
FROM....

no iboquery qdo atribui os campos precisei colocar TOT como campo calculado para dar certo

muito obrigada msm....
Responder

Gostei + 0

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

Aceitar