none
Agrupamento de lançamentos RRS feed

  • Pergunta

  • Olá pessoal.

    Preciso fazer uma query que me permita agrupar totais mensais de movimentos financeiros por conta financeira. Vou explicar melhor: Tenho uma tabela que recebe lançamentos em contas financeiras e preciso de uma query que relacione o período de um ano com o total de cada conta agrupados por mes. Vamos lá.

    No formulário, irei fornecer o periodo desejado.

    Tabela Movto

    MOFDATA, MOFCONTA, MOFVALOR

    Layout da consulta

    Conta     Jul14     Jun14     Mai14     Abr14     Mar14      Fev14     Jan14     Dez13      Nov13     Out13     Set13     Ago13

    303     1020,00  200,33    540,99      ...

    304       876,99  989,55      ...

    ...

    Não consegui fazer a query para agrupar desta forma. Alguém poderia ajudar?? brigado

    terça-feira, 22 de julho de 2014 20:12

Respostas

  • Deleted
    terça-feira, 22 de julho de 2014 21:13
  • Favor não esquecer de marcar como respondido, caso atenda a sua necessidade, obrigado.

    PRIMEIRA OPÇÃO


    SELECT [MOFCONTA] AS CONTA, 
    JAN = SUM(CASE WHEN MONTH([MOFDATA])=1 THEN [MOFVALOR] ELSE 0.00 END), 
    FEV = SUM(CASE WHEN MONTH([MOFDATA])=2 THEN [MOFVALOR] ELSE 0.00 END), 
    MAR = SUM(CASE WHEN MONTH([MOFDATA])=3 THEN [MOFVALOR] ELSE 0.00 END), 
    ABR = SUM(CASE WHEN MONTH([MOFDATA])=4 THEN [MOFVALOR] ELSE 0.00 END) 
    FROM [DBO].[MOVTO] 
    WHERE [MOFDATA] >= '2014-01-01' AND [MOFDATA] < '2015-01-01'
    GROUP BY [MOFCONTA] 
    ORDER BY YEAR([MOFCONTA]);

    SEGUNDA OPÇÃO

    SELECT * FROM (
    SELECT [MOFCONTA] AS CONTA,  CONVERT(VARCHAR(3), [MOFDATA], 100) AS MESES,
    ISNULL([MOFVALOR], 0.00) AS VALOR
    FROM [DBO].[MOVTO] 
    WHERE [MOFDATA] >= '2014-01-01' AND [MOFDATA] < '2015-01-01'
    ) AS BRUTO
    PIVOT(SUM(VALOR) FOR MESES IN ([JAN], [FEV], [MAR], [ABR], [MAI], [JUN], [JUL], [AGO], [SET], [OUT], [NOV],[DEZ] )) AS R;

    quarta-feira, 23 de julho de 2014 01:54

Todas as Respostas

  • Deleted
    terça-feira, 22 de julho de 2014 21:13
  • Favor não esquecer de marcar como respondido, caso atenda a sua necessidade, obrigado.

    PRIMEIRA OPÇÃO


    SELECT [MOFCONTA] AS CONTA, 
    JAN = SUM(CASE WHEN MONTH([MOFDATA])=1 THEN [MOFVALOR] ELSE 0.00 END), 
    FEV = SUM(CASE WHEN MONTH([MOFDATA])=2 THEN [MOFVALOR] ELSE 0.00 END), 
    MAR = SUM(CASE WHEN MONTH([MOFDATA])=3 THEN [MOFVALOR] ELSE 0.00 END), 
    ABR = SUM(CASE WHEN MONTH([MOFDATA])=4 THEN [MOFVALOR] ELSE 0.00 END) 
    FROM [DBO].[MOVTO] 
    WHERE [MOFDATA] >= '2014-01-01' AND [MOFDATA] < '2015-01-01'
    GROUP BY [MOFCONTA] 
    ORDER BY YEAR([MOFCONTA]);

    SEGUNDA OPÇÃO

    SELECT * FROM (
    SELECT [MOFCONTA] AS CONTA,  CONVERT(VARCHAR(3), [MOFDATA], 100) AS MESES,
    ISNULL([MOFVALOR], 0.00) AS VALOR
    FROM [DBO].[MOVTO] 
    WHERE [MOFDATA] >= '2014-01-01' AND [MOFDATA] < '2015-01-01'
    ) AS BRUTO
    PIVOT(SUM(VALOR) FOR MESES IN ([JAN], [FEV], [MAR], [ABR], [MAI], [JUN], [JUL], [AGO], [SET], [OUT], [NOV],[DEZ] )) AS R;

    quarta-feira, 23 de julho de 2014 01:54
  • Olá José, Veranildo e Ricardo.

    Obrigado pela ajuda. Precisei ver um outro problema e vou retomar a este nesta semana. Mas antecipadamente informo que irei testar e assim que houver respostas retornarei.

    Obrigado.

    sábado, 26 de julho de 2014 15:08
  • Pessoal, boa tarde. 

    Optei por usar esta resposta que foi apresentada mas estou tendo um erro. Estou fazendo a seguinte query:
    SELECT [MOFCONTA] AS CONTA, JAN=SUM(CASE WHEN MONTH([MOFDATA])=1 THEN [MOFVALOR] ELSE 0.00 END), FEV=SUM(CASE WHEN MONTH([MOFDATA])=2 THEN [MOFVALOR] ELSE 0.00 END), MAR=SUM(CASE WHEN MONTH([MOFDATA])=3 THEN [MOFVALOR] ELSE 0.00 END), ABR = SUM(CASE WHEN MONTH([MOFDATA])=4 THEN [MOFVALOR] ELSE 0.00 END), MAI = SUM(CASE WHEN MONTH([MOFDATA])=5 THEN [MOFVALOR] ELSE 0.00 END), JUN = SUM(CASE WHEN MONTH([MOFDATA])=6 THEN [MOFVALOR] ELSE 0.00 END), JUL = SUM(CASE WHEN MONTH([MOFDATA])=7 THEN [MOFVALOR] ELSE 0.00 END), AGO = SUM(CASE WHEN MONTH([MOFDATA])=8 THEN [MOFVALOR] ELSE 0.00 END), SET = SUM(CASE WHEN MONTH([MOFDATA])=9 THEN [MOFVALOR] ELSE 0.00 END), OUT = SUM(CASE WHEN MONTH([MOFDATA])=10 THEN [MOFVALOR] ELSE 0.00 END), NOV = SUM(CASE WHEN MONTH([MOFDATA])=11 THEN [MOFVALOR] ELSE 0.00 END), DEZ = SUM(CASE WHEN MONTH([MOFDATA])=12 THEN [MOFVALOR] ELSE 0.00 END) from SCCAMOF WHERE [MOFDATA] >= '2014-01-01' AND [MOFDATA] < '2015-01-01'
    GROUP BY [MOFCONTA] ORDER BY YEAR([MOFCONTA]);

    ... e a Mensagem de erro é: Function name is missing )

    O que pode estar errado?
    Obrigado a todos

    segunda-feira, 25 de agosto de 2014 18:16