none
SQL - QUERY PARA SOMAR OS MESES RRS feed

  • Pergunta

  • Boa Tarde, Pessoal!!! 

    Preciso de um auxilio de vocês, espero que ajudem...

    Estou com uma seguinte query, está logo a baixo, preciso somar, estou enviando um print para melhor entender.

    Preciso Criar a linha "C (A+B)" E "F(D+E)"


    SELECT CT1_XTIPO, 
    SUM(JANEIRO) AS JANEIRO,  
    SUM(FEVEREIRO) AS FEVEREIRO, 
    CONSOLIDADO= SUM(JANEIRO+FEVEREIRO)
    FROM
    (
    SELECT CONTA, CT1_XTIPO, 
    SUM(JANEIRO) AS JANEIRO, 
    SUM(FEVEREIRO) AS FEVEREIRO,
    CONSOLIDADO= SUM(JANEIRO+FEVEREIRO)
     FROM ( 
    SELECT CONTA, CT1_XTIPO, TIPO, 
     JANEIRO = CASE WHEN CT2_DATA BETWEEN '20160101' AND '20160131' THEN SUM(CT2_VALOR) ELSE 0 END, 
     FEVEREIRO = CASE WHEN CT2_DATA BETWEEN '20160201' AND '20160229' THEN SUM(CT2_VALOR) ELSE 0 END
     FROM ( 
    SELECT CT2.CT2_DEBITO CONTA, CT1.CT1_XTIPO, CT2.CT2_DATA, 
    TIPO = CASE WHEN CT1.CT1_NORMAL = '1' THEN 'DEVEDORA' ELSE 'CREDORA' END, CT2.CT2_VALOR  * -1 CT2_VALOR 
    FROM CT2010 CT2 INNER JOIN CT1010 CT1 
    ON CT2.CT2_DEBITO = CT1.CT1_CONTA AND CT1.D_E_L_E_T_ = '' AND CT1.CT1_XTIPO <> '' 
    WHERE CT2.CT2_FILIAL = ' ' 
    AND CT2.CT2_MOEDLC = '01' AND CT2.CT2_TPSALD = '1' AND CT2.D_E_L_E_T_ <> '*' 
    AND CT2.CT2_DATA BETWEEN '20150901' AND '20160229' 
    UNION ALL  
    SELECT CT2_CREDIT CONTA, CT1.CT1_XTIPO, CT2.CT2_DATA, 
    TIPO = CASE WHEN CT1.CT1_NORMAL = '1' THEN 'DEVEDORA' ELSE 'CREDORA' END, CT2_VALOR CREDITO 
    FROM CT2010 CT2 INNER JOIN CT1010 CT1 
    ON CT2.CT2_CREDIT = CT1_CONTA AND CT1.D_E_L_E_T_ = '' AND CT1.CT1_XTIPO <> '' 
    WHERE CT2.CT2_FILIAL = ' ' 
    AND CT2.CT2_MOEDLC = '01' AND CT2.CT2_TPSALD = '1' AND CT2.D_E_L_E_T_ <> '*' 
    AND CT2.CT2_DATA BETWEEN '20150901' AND '20160229' 
    ) AS TBL1 GROUP BY TBL1.CONTA, TIPO, TBL1.CT1_XTIPO, TBL1.CT2_DATA 
    ) AS TBL2 
    GROUP BY TBL2.CT1_XTIPO, TBL2.CONTA, TBL2.TIPO 
    ) AS TBL3
    GROUP BY TBL3.CT1_XTIPO 

    terça-feira, 12 de julho de 2016 20:14

Respostas

  • Bom dia,

    Experimente fazer uns testes com a query abaixo:

    with 
        CTE_Union as
        (
            SELECT 
                CT1.CT1_XTIPO, 
                CT2.CT2_DATA, 
                CT2.CT2_VALOR * -1 CT2_VALOR 
            FROM CT2010 CT2 
            INNER JOIN CT1010 CT1 
                ON 
                    CT2.CT2_DEBITO = CT1.CT1_CONTA AND 
                    CT1.D_E_L_E_T_ = '' AND 
                    CT1.CT1_XTIPO <> '' 
            WHERE 
                CT2.CT2_FILIAL = ' ' AND 
                CT2.CT2_MOEDLC = '01' AND 
                CT2.CT2_TPSALD = '1' AND 
                CT2.D_E_L_E_T_ <> '*' AND 
                CT2.CT2_DATA BETWEEN '20160101' AND '20160229' 
    
            UNION ALL  
    
            SELECT 
                CT1.CT1_XTIPO, 
                CT2.CT2_DATA, 
                CT2_VALOR 
            FROM CT2010 CT2 
            INNER JOIN CT1010 CT1 
                ON 
                    CT2.CT2_CREDIT = CT1_CONTA AND 
                    CT1.D_E_L_E_T_ = '' AND 
                    CT1.CT1_XTIPO <> '' 
            WHERE 
                CT2.CT2_FILIAL = ' ' AND 
                CT2.CT2_MOEDLC = '01' AND 
                CT2.CT2_TPSALD = '1' AND 
                CT2.D_E_L_E_T_ <> '*' AND 
                CT2.CT2_DATA BETWEEN '20160101' AND '20160229' 
        ),
    
        CTE_Sum as
        ( 
            SELECT 
                CASE 
                    WHEN CT1_XTIPO IN ('A', 'B') THEN 'C'
                    WHEN CT1_XTIPO IN ('D', 'E') THEN 'F'
                END AS TIPO_TOTAL,
                CT1_XTIPO, 
                JANEIRO = SUM(CASE WHEN CT2_DATA BETWEEN '20160101' AND '20160131' THEN CT2_VALOR ELSE 0 END), 
                FEVEREIRO = SUM(CASE WHEN CT2_DATA BETWEEN '20160201' AND '20160229' THEN CT2_VALOR ELSE 0 END)
            FROM CTE_Union
            GROUP BY 
                TBL1.CT1_XTIPO
        )
    
    SELECT 
        CASE WHEN GROUPING_ID(TIPO_TOTAL, CT1_XTIPO) = 1 THEN TIPO_TOTAL ELSE CT1_XTIPO END AS CT1_XTIPO, 
        SUM(JANEIRO) AS JANEIRO,  
        SUM(FEVEREIRO) AS FEVEREIRO, 
        CONSOLIDADO = SUM(JANEIRO+FEVEREIRO)
    FROM CTE_Sum
    GROUP BY GROUPING SETS
        ( (TIPO_TOTAL, CT1_XTIPO), (TIPO_TOTAL) )

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 13 de julho de 2016 14:02

Todas as Respostas

  • Boa noite,

    Bruno, existe algo em comum entre (A e B) e (D e E)?

    Por acaso um dos conjuntos é débito e o outro é credito?


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 12 de julho de 2016 21:16
  • Deleted
    terça-feira, 12 de julho de 2016 21:42
  • Bom dia, José Diz.

    Não existe algo em comum, mas tem credito e debito sim, não posso colocar tipo na condição, pois existe vários cadastrados, a não ser se for para identificar o Campo Tipo que soma A + B

    O que eu preciso implantar neste script é pegar o resultado de cada mês no exemplo: Janeiro - Somar o Tipo 'A' e Tipo 'B' e criar uma linha com a letra 'C' Totalizando A+B, Fevereiro e assim por diante.

    Não sei se está forma que expressei conseguiu entender...

    quarta-feira, 13 de julho de 2016 12:25
  • Bruno, considerando que existem vários tipos cadastrados, como seria possível identificar qual tipo deve ser somado com qual?

    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 13 de julho de 2016 13:11
  • Bom dia.

    Nesta situação, teria que colocar no script a condição do campo Tipo A+B e somar e totalizar mês a mês, como do exemplo da imagem da primeira interação que fiz, entendeu?

    Até mesmo, tem outra situação aqui, que vai ter que somar Tipo F+G+H, mas conseguindo criar está condição do A+B, será automático para esta.

    Entendeu?

    Grato pela atenção.
    Atenciosamente.

    quarta-feira, 13 de julho de 2016 13:20
  • Bom dia,

    Experimente fazer uns testes com a query abaixo:

    with 
        CTE_Union as
        (
            SELECT 
                CT1.CT1_XTIPO, 
                CT2.CT2_DATA, 
                CT2.CT2_VALOR * -1 CT2_VALOR 
            FROM CT2010 CT2 
            INNER JOIN CT1010 CT1 
                ON 
                    CT2.CT2_DEBITO = CT1.CT1_CONTA AND 
                    CT1.D_E_L_E_T_ = '' AND 
                    CT1.CT1_XTIPO <> '' 
            WHERE 
                CT2.CT2_FILIAL = ' ' AND 
                CT2.CT2_MOEDLC = '01' AND 
                CT2.CT2_TPSALD = '1' AND 
                CT2.D_E_L_E_T_ <> '*' AND 
                CT2.CT2_DATA BETWEEN '20160101' AND '20160229' 
    
            UNION ALL  
    
            SELECT 
                CT1.CT1_XTIPO, 
                CT2.CT2_DATA, 
                CT2_VALOR 
            FROM CT2010 CT2 
            INNER JOIN CT1010 CT1 
                ON 
                    CT2.CT2_CREDIT = CT1_CONTA AND 
                    CT1.D_E_L_E_T_ = '' AND 
                    CT1.CT1_XTIPO <> '' 
            WHERE 
                CT2.CT2_FILIAL = ' ' AND 
                CT2.CT2_MOEDLC = '01' AND 
                CT2.CT2_TPSALD = '1' AND 
                CT2.D_E_L_E_T_ <> '*' AND 
                CT2.CT2_DATA BETWEEN '20160101' AND '20160229' 
        ),
    
        CTE_Sum as
        ( 
            SELECT 
                CASE 
                    WHEN CT1_XTIPO IN ('A', 'B') THEN 'C'
                    WHEN CT1_XTIPO IN ('D', 'E') THEN 'F'
                END AS TIPO_TOTAL,
                CT1_XTIPO, 
                JANEIRO = SUM(CASE WHEN CT2_DATA BETWEEN '20160101' AND '20160131' THEN CT2_VALOR ELSE 0 END), 
                FEVEREIRO = SUM(CASE WHEN CT2_DATA BETWEEN '20160201' AND '20160229' THEN CT2_VALOR ELSE 0 END)
            FROM CTE_Union
            GROUP BY 
                TBL1.CT1_XTIPO
        )
    
    SELECT 
        CASE WHEN GROUPING_ID(TIPO_TOTAL, CT1_XTIPO) = 1 THEN TIPO_TOTAL ELSE CT1_XTIPO END AS CT1_XTIPO, 
        SUM(JANEIRO) AS JANEIRO,  
        SUM(FEVEREIRO) AS FEVEREIRO, 
        CONSOLIDADO = SUM(JANEIRO+FEVEREIRO)
    FROM CTE_Sum
    GROUP BY GROUPING SETS
        ( (TIPO_TOTAL, CT1_XTIPO), (TIPO_TOTAL) )

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 13 de julho de 2016 14:02
  • Boa Tarde, gapimex.

    È isso mesmo, vou adaptar a necessidades das regras.

    Grato pela sua atenção e tempo dedicado.

    Atenciosamente.
    quarta-feira, 13 de julho de 2016 17:32