Fórum soma IBOQUERY com duplicidade #502411
25/11/2014
0
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
Curtir tópico
+ 0Post mais votado
25/11/2014
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
Gostei + 1
Mais Posts
25/11/2014
Cristiane
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....
Gostei + 0
25/11/2014
Renato Rubinho
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
Gostei + 1
25/11/2014
Cristiane
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
Gostei + 0
25/11/2014
Cristiane
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
Gostei + 0
26/11/2014
Renato Rubinho
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
Gostei + 1
26/11/2014
Cristiane
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
Gostei + 0
26/11/2014
Cristiane
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
Gostei + 0
26/11/2014
Renato Rubinho
ORDER BY SUM(TOT) DESC
ou
ORDER BY 2 DESC
Abraççç,
rrubinho
Gostei + 1
26/11/2014
Cristiane
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?
Gostei + 0
26/11/2014
Renato Rubinho
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.
Gostei + 1
26/11/2014
Cristiane
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....
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)