Usuário com melhor resposta
Como criar um totalizador dentro de um group by que ja esta totalizado ?!?!?!?!?!

Pergunta
-
Bom dia,
montei a Query abaixo
SELECT A1_CGC,FT_FILIAL,FT_CLIEFOR,FT_CFOP,
CASE
WHEN MONTH(FT_EMISSAO) = 1 THEN 'JANEIRO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 2 THEN 'FEVEREIRO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 3 THEN 'MARCO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 4 THEN 'ABRIL'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 5 THEN 'MAIO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 6 THEN 'JUNHO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 7 THEN 'JULHO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 8 THEN 'AGOSTO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 9 THEN 'SETEMBRO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 10 THEN 'OUTUBRO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 11 THEN 'NOVEMBRO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
WHEN MONTH(FT_EMISSAO) = 12 THEN 'DEZEMBRO'+'/'+CAST(Year(FT_EMISSAO) AS CHAR)
END AS MES,
SUM(FT_VALCONT) AS SIT_VENDA FROM SFT010 A, SA1010 AS B
WHERE A.FT_CLIEFOR>='000789'AND A.FT_CLIEFOR <= '000789'
AND A.FT_EMISSAO>='20170201'
AND A.FT_EMISSAO<='20171231'
AND A.FT_DTCANC = ' '
AND A.FT_CLIEFOR = B.A1_COD
AND A.D_E_L_E_T_ = ' '
AND B.D_E_L_E_T_ = ' '
GROUP BY A1_CGC,FT_FILIAL,FT_CLIEFOR,MONTH(FT_EMISSAO),YEAR(FT_EMISSAO),FT_CFOP
ORDER BY A1_CGC,FT_FILIAL
o Resultado que sai é assim
0101 000789 02/2017 5101 10.000,00
0101 000789 02/2017 5102 25.000,00
Preciso que o resultado saia assim:
0101 000789 02/2017 35.000,00
nao posso tirar a CFOP da Query pois o relatorio esta todo baseado na CFOP.
Obrigado
Marcelo Picucci Costa Analista de Sistemas
Respostas
-
Você por acaso quer obter no resultado as linhas com as somas por CFOP e no final uma linha adicional com a soma de todas as CFOPs? Se for isso experimente fazer uns testes mantendo a coluna FT_CFOP no Select e deixando o Group By da seguinte forma:
GROUP BY GROUPING SETS ( (A1_CGC, FT_FILIAL, FT_CLIEFOR, MONTH(FT_EMISSAO), YEAR(FT_EMISSAO), FT_CFOP), (A1_CGC, FT_FILIAL, FT_CLIEFOR, MONTH(FT_EMISSAO), YEAR(FT_EMISSAO)) )
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Marcelo Picucci Costa sexta-feira, 6 de julho de 2018 14:43
Todas as Respostas
-
-
Bom dia,
Marcelo, acho que no seu caso você pode deixar um valor fixo (ex: null) com o Alias igual o nome da coluna (FT_CFOP), e também remover essa coluna do Group By para que as linhas sejam agrupadas.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
-
-
A primeira linha da sua query ficaria mais ou menos da seguinte forma:
SELECT A1_CGC,FT_FILIAL,FT_CLIEFOR, cast(null as integer) as FT_CFOP,
E o Group By sem a FT_CFOP:
GROUP BY A1_CGC,FT_FILIAL,FT_CLIEFOR,MONTH(FT_EMISSAO),YEAR(FT_EMISSAO)
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Editado gapimex quinta-feira, 5 de julho de 2018 19:05
-
Obrigado pela ajuda,
MAs o que acontece é o seguinte se eu por a FT_CFOP como 0 meu relatorio nao irá sair na base fuciona porque soma todas as CFOPs que estao na tabela e no meu caso existem CFOPS específicas para entrada e saida.
Marcelo Picucci Costa Analista de Sistemas
-
Você por acaso quer obter no resultado as linhas com as somas por CFOP e no final uma linha adicional com a soma de todas as CFOPs? Se for isso experimente fazer uns testes mantendo a coluna FT_CFOP no Select e deixando o Group By da seguinte forma:
GROUP BY GROUPING SETS ( (A1_CGC, FT_FILIAL, FT_CLIEFOR, MONTH(FT_EMISSAO), YEAR(FT_EMISSAO), FT_CFOP), (A1_CGC, FT_FILIAL, FT_CLIEFOR, MONTH(FT_EMISSAO), YEAR(FT_EMISSAO)) )
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Marcelo Picucci Costa sexta-feira, 6 de julho de 2018 14:43
-
-
vou por o trecho do fonte aqui:
While (AllTrim(TML->FT_FILIAL) == _cFilial)
if(MV_PAR01 == 1)
IF TML->FT_CFOP = '1201' .OR. TML->FT_CFOP = '1202' .OR. TML->FT_CFOP ='1411' .OR. TML->FT_CFOP ='1662'
nVlrDev := nVlrDev + TML->VALOR_VENDA
ElseIF TML->FT_CFOP = '5101' .OR. TML->FT_CFOP = '5102' .OR. TML->FT_CFOP ='5117' .OR. TML->FT_CFOP ='5405'.OR. TML->FT_CFOP ='5656'
nVlrReal:= TML->VALOR_VENDA - nVlrDev
oPrint:Say(nLin,433,AllTrim(TML->TipoDoc) ,oFont1)
oPrint:Say(nLin,863,AllTrim(TML->FT_NFISCAL) ,oFont1)
oPrint:Say(nLin,1198,AllTrim(TML->FT_EMISSAO ) ,oFont1)
oPrint:Say(nLin,1528,"R$"+ cValToChar(TRANSFORM(nVlrReal,"@E 999,999,999.99")),oFont1)
Endif
else
IF TML->FT_CFOP = '1201' .OR. TML->FT_CFOP = '1202' .OR. TML->FT_CFOP ='1411' .OR. TML->FT_CFOP ='1662'
nVlrDev := nVlrDev + TML->VALOR_VENDA
ElseIF TML->FT_CFOP = '5101' .OR. TML->FT_CFOP = '5102' .OR. TML->FT_CFOP ='5117' .OR. TML->FT_CFOP ='5405'.OR. TML->FT_CFOP ='5656'
nVlrRealSit := TML->SIT_VENDA - nVlrDev
oPrint:Say(nLin,433,AllTrim(TML->MES) ,oFont1)
oPrint:Say(nLin,1198,"R$"+ cValToChar(TRANSFORM(nVlrRealSit,"@E 999,999,999.99")),oFont1)
Endif
EndIf
if(MV_PAR01 == 1)
nTotal +=nVlrReal
nTotalFilial += nVlrReal
else
IF TML->FT_CFOP = '5101' .OR. TML->FT_CFOP = '5102' .OR. TML->FT_CFOP ='5117' .OR. TML->FT_CFOP ='5405'.OR. TML->FT_CFOP ='5656'
nTotal += nVlrRealSit
nTotalFilial += nVlrRealSit
Endif
endIf
TML->(dbSkip())
nVlrDev:=0
nCont := nCont + 1
nLin := nlin+60
if(nCont >= 30)
oPrint:Startpage()
fCabecalho()
nCont := 0
nLin := 300
if(MV_PAR01 == 1)
oPrint:Say(nLin,433 ,"Tipo do documento",oFont11n,,)
oPrint:Say(nLin,863 ,"Documento",oFont11n,,)
oPrint:Say(nLin,1148 ,"Data de emissão",oFont11n,,)
oPrint:Say(nLin,1528 ,"Valor da venda",oFont11n,,)
else
oPrint:Say(nLin,433 ,"Periodo",oFont11n,,)
oPrint:Say(nLin,1148 ,"Valor da Venda",oFont11n,,)
Endif
nLin := nlin+60
endif
// Enddo
Enddo
//TML->(dbSkip())
cFilAtual := _cFilial
_cFilial := AllTrim(TML->FT_FILIAL)
oPrint:Say(nLin,255,Replicate("-",60),oFont11n,100, , 0, 0)
nLin := nlin+60
oPrint:Say(nLin,255,"Total de venda da Filial: "+cFilAtual,oFont11n,100, , 0, 0)
oPrint:Say(nLin,800,"R$"+ TRANSFORM(nTotalFilial,"@E 999,999,999.99"),oFont11n) //Codigo
nLin := nlin+60
nTotalFilial := 0
Enddo
if (_cCGC <> AllTrim(TML->A1_CGC) .And. AllTrim(TML->A1_CGC)<> '')
oPrint:Startpage()
fCabecalho()
nCont := 0
nLin := 300
EndIf
_cCGC := AllTrim(TML->A1_CGC)
Enddo
oPrint:Say(nLin,255,Replicate("--",60),oFont11n,100, , 0, 0)
oPrint:Say(nLin+=60,255,"Total das Vendas:",oFont11n,100, , 0, 0)
oPrint:Say(nLin,550,"R$"+ TRANSFORM(nTotal,"@E 999,999,999.99"),oFont11n) //Codigo
oPrint:EndPage()
oPrint:Preview()
dbclosearea()
Return()
Static Function fCabecalho()
//Local nRowCab := 100
//Local nColCab := 230
Local nTipo := ""
Local xLogoAcol := GetSrvProfString('Startpath','') + 'LGMID.jpg'
//fBuscDados()
//DbSelectArea("TML")
//DbGoTop()
oPrint:SayBitmap(80,250,xLogoAcol,230,230)
oPrint:SayAlign(430-300,430, "E X T R A T O - I R R F",oFont11n,1528,171,1,2)
oPrint:SayAlign(430-260,430, "Periodo de: "+ cValToChar(MV_PAR02) +" A "+ cValToChar(MV_PAR03),oFont11n,1528,171,1,2)
Return
Marcelo Picucci Costa Analista de Sistemas
-