Dois Select sum(...? Como?

Delphi

18/03/2004

Tenho a seguinte instrução SQL para agrupar os lançamentos de entradas e saídas de produtos na tabela MOVIESTOQUE:
CommandText := ´Select MOVIESTOQUE.PRODUTO, SUM(MOVIESTOQUE.QUANTIDADE)as SubTotal, PRODUTOS.DESCRICAO as DESCRPRODUTO from MOVIESTOQUE Inner Join PRODUTOS on PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO Where MOVIESTOQUE.DATA BETWEEN :VInicio and :VFim and OPERACAO =:VOperacao Group By PRODUTO, DESCRICAO´;

Params[0].AsDate := VDataInicial;
Params[1].AsDate := VDataFinal;

Se quero o relatório de entradas, complemento a rotina assim:
Params[2].asString := ´E´.
E, se quero o relatório de saídas, complemento a rotina assim:
Params[2].asString := ´S´

O relatório funciona bem. O problema é que, do jeito que está, tenho que fazer dois relatórios: um para saídas e outro para entradas. O que gostaria de fazer é apenas um relatório onde constassem os dois SubTotal - tipo duas colunas. Já tentei fazer duas Query, mas daí aquela que eu não colocar na propriedade DataSet do QuickReport imprimirá apenas o primeiro lançamento.
Se você tiver uma idéia de como fazer o que eu preciso, por gentileza me ajude. Obrigado.
Precisaria fazer dois ´Select Sum(...´ na mesma instrução SQL, mas como?


Valdirdill

Valdirdill

Curtidas 0

Respostas

Blackjaguar

Blackjaguar

18/03/2004

Vc não informou qual é o Banco que esta utilizando, mas acho pode fazer assim:

Select
PRODUTOS.CODIGO,
PRODUTOS.DESCRICAO as DESCRPRODUTO,
(Select sum (MOVIESTOQUE.QUANTIDADE)
from MOVIESTOQUE
Where MOVIESTOQUE.DATA BETWEEN :VInicio and :VFim
and OPERACAO = ´E´
and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalEntrada,
(Select sum (MOVIESTOQUE.QUANTIDADE)
from MOVIESTOQUE
Where MOVIESTOQUE.DATA BETWEEN :VInicio and :VFim
and OPERACAO = ´S´
and PRODUTOS.CODIGO = MOVIESTOQUE.PRODUTO) as SubTotalSaida
from PRODUTOS


GOSTEI 0
Paulo_amorim

Paulo_amorim

18/03/2004

Olá

1- tente agrupar por OPERACAO tambem...

2- Se nao der certo:

Como as 2 queries sao quase iguais, pode-se usar UNION

Select M.PRODUTO as Produto, 
SUM(M.QUANTIDADE)as SubTotal, 
P.DESCRICAO as DescProduto 
from MOVIESTOQUE M Inner Join PRODUTOS P 
on P.CODIGO = M.PRODUTO 
Where M.DATA BETWEEN :VInicio and :VFim 
and OPERACAO = ´E´
Group By PRODUTO, DESCRICAO

UNION

Select M.PRODUTO as Produto, 
SUM(M.QUANTIDADE)as SubTotal, 
P.DESCRICAO as DescProduto 
from MOVIESTOQUE M Inner Join PRODUTOS P 
on P.CODIGO = M.PRODUTO 
Where M.DATA BETWEEN :VInicio and :VFim 
and OPERACAO = ´S´
Group By PRODUTO, DESCRICAO


Até+


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

18/03/2004

ou utilizando JOIN, assim:

Select PROD.CODIGO AS PRODUTO,PROD.DESCRICAO AS DESCRPRODUTO,
          SUM(MOV_E.QUANTIDADE) as QTD_ENTRADA, SUM(MOV_S.QUANTIDADE) as QTD_SAIDA
from PRODUTOS PROD
Left Join MOVIESTOQUE MOV_E on (MOV_E.PRODUTO = PROD.CODIGO AND MOV_E.OPERACAO = ´E´
      AND MOV_E.DATA BETWEEN :VINICIO AND :VFIM)
Left Join MOVIESTOQUE MOV_S on (MOV_S.PRODUTO = PROD.CODIGO AND MOV_S.OPERACAO = ´S´
      AND MOV_S.DATA BETWEEN :VINICIO AND :VFIM)
Where NOT (MOV_E.QUANTIDADE IS NULL) AND NOT (MOV_S.QUANTIDADE IS NULL)
Group By PROD.CODIGO, PROD.DESCRICAO


GOSTEI 0
POSTAR