none
Como criar um totalizador dentro de um group by que ja esta totalizado ?!?!?!?!?! RRS feed

  • 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

    quinta-feira, 5 de julho de 2018 13:03

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

    quinta-feira, 5 de julho de 2018 20:37

Todas as Respostas

  • Deleted
    quinta-feira, 5 de julho de 2018 13:29
  • 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

    quinta-feira, 5 de julho de 2018 13:40
  • Jose Diniz boa tarde e obrigado pelo Retorno

    Nao posso tirar do Select pois o relatorio esta todo baseado neste campo.


    Marcelo Picucci Costa Analista de Sistemas

    quinta-feira, 5 de julho de 2018 17:43
  • Obrigado pelo retorno GAPIMEX mas nao entendi pode exemplificar por favor?

    Marcelo Picucci Costa Analista de Sistemas

    quinta-feira, 5 de julho de 2018 17:44
  • 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
    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

    quinta-feira, 5 de julho de 2018 20:16
  • 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

    quinta-feira, 5 de julho de 2018 20:37
  • Deleted
    sexta-feira, 6 de julho de 2018 12:32
  • 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

    sexta-feira, 6 de julho de 2018 12:48
  • oBRIGADO E mE aJUDOU

    Marcelo Picucci Costa Analista de Sistemas

    sexta-feira, 6 de julho de 2018 13:09