none
SQL SERVER RRS feed

  • Pergunta

  • Bom dia. 

    no seguinte script:

    SELECT 

    case when (DATEPART(MONTH, cr.VENCIMENTO) = (SELECT     MONTH(GETDATE()) + 1 AS Expr1)) 
    AND (DATEPART(YEAR, cr.VENCIMENTO) = 2013) then SUM(cr.VALORNAMOEDA1)  end as teste


    FROM CONTAARECEBER_R cr 


    WHERE

    cr.RCLIENTE = 2323713 
    and cr.rsituacao = '2347'

    group by cr.VENCIMENTO,
    cr.VALORNAMOEDA1

    o resultado é o seguinte: 

    Como eu faço para somar todos os valores e retornar somente o valor total?

    Obrigado.

    sexta-feira, 12 de abril de 2013 11:50

Respostas

  • César.

    Como você tem uma subquery, não dá para te indicar a inversão do sum, colocando ele fora do teu caso.

    Mas você pode fazer uma CTE para resolver o teu caso:

    ;WITH CTE
    AS (
    SELECT 
    case when (DATEPART(MONTH, cr.VENCIMENTO) = (SELECT     MONTH(GETDATE()) + 1 AS Expr1)) 
    AND (DATEPART(YEAR, cr.VENCIMENTO) = 2013) then SUM(cr.VALORNAMOEDA1)  end as teste
    FROM CONTAARECEBER_R cr 
    WHERE
    cr.RCLIENTE = 2323713 
    and cr.rsituacao = '2347'
    group by cr.VENCIMENTO,
    cr.VALORNAMOEDA1
    )
    SELECT SUM(TESTE) 
    FROM CTE

    Espero que te ajude.

    []'s

    • Marcado como Resposta César Felix quarta-feira, 17 de abril de 2013 12:38
    terça-feira, 16 de abril de 2013 11:48

Todas as Respostas

  • Cesar, veja se assim funciona:

    SELECT 
       case when (DATEPART(MONTH, cr.VENCIMENTO) = (SELECT     MONTH(GETDATE()) + 1 AS Expr1)) 
          AND (DATEPART(YEAR, cr.VENCIMENTO) = 2013) then SUM(cr.VALORNAMOEDA1)  end as teste
       FROM CONTAARECEBER_R cr 
    WHERE cr.RCLIENTE = 2323713 
    and cr.rsituacao = '2347'
    


    Alexandre Matayosi Conde Mauricio.

    sexta-feira, 12 de abril de 2013 11:53
  • Bom dia,

    César, você também pode experimentar dessa forma:

    SELECT SUM(cr.VALORNAMOEDA1) as teste
    FROM CONTAARECEBER_R cr 
    WHERE
        cr.RCLIENTE = 2323713 and 
        cr.rsituacao = '2347' and
        DATEDIFF(MONTH, cr.VENCIMENTO, DATEADD(MONTH, 1, GETDATE())) = 1
    

    Espero que ajude.


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

    sexta-feira, 12 de abril de 2013 13:13
  • bom dia.

    Alexandre, dessa forma não funcionou; o sql afirma que tenho que agrupar o resultado.

     

    Gapimex, o problema que eu tenho outras contas a receber de outros meses, e se eu fizer essa condição, restrinjo o mês, entendeu?

     

    att

    terça-feira, 16 de abril de 2013 11:35
  • César.

    Como você tem uma subquery, não dá para te indicar a inversão do sum, colocando ele fora do teu caso.

    Mas você pode fazer uma CTE para resolver o teu caso:

    ;WITH CTE
    AS (
    SELECT 
    case when (DATEPART(MONTH, cr.VENCIMENTO) = (SELECT     MONTH(GETDATE()) + 1 AS Expr1)) 
    AND (DATEPART(YEAR, cr.VENCIMENTO) = 2013) then SUM(cr.VALORNAMOEDA1)  end as teste
    FROM CONTAARECEBER_R cr 
    WHERE
    cr.RCLIENTE = 2323713 
    and cr.rsituacao = '2347'
    group by cr.VENCIMENTO,
    cr.VALORNAMOEDA1
    )
    SELECT SUM(TESTE) 
    FROM CTE

    Espero que te ajude.

    []'s

    • Marcado como Resposta César Felix quarta-feira, 17 de abril de 2013 12:38
    terça-feira, 16 de abril de 2013 11:48
  • Deu certinho Logan...

    só mais uma dúvida: eu consigo utilizar essa estrutura (CTE) em uma view?

    pois é relatório que estou desenvolvendo é uma view, entendeu?

    att

    terça-feira, 16 de abril de 2013 12:34
  • Cesar,

    É possível sim, sem problema algum.

    Caso a resposta tenha sido respondida, peço para que marque as que te ajudaram como resposta, para facilitar posteriores consultas sobre o assunto.

    []'s!

    terça-feira, 16 de abril de 2013 13:14
  • Bom dia,

    César, acho que você também pode experimentar mais ou menos dessa forma:

    SELECT 
        SUM(case when DATEDIFF(MONTH, cr.VENCIMENTO, DATEADD(MONTH, 1, GETDATE())) = 1 
                    then cr.VALORNAMOEDA1 else 0 end) as teste
    FROM CONTAARECEBER_R cr 
    WHERE
        cr.RCLIENTE = 2323713 and 
        cr.rsituacao = '2347'
        

    Espero que seja útil.


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


    • Editado gapimex terça-feira, 16 de abril de 2013 13:18
    terça-feira, 16 de abril de 2013 13:18
  • Gapimex, bom dia.

    dessa maneira não deu certo...

    att

    quarta-feira, 17 de abril de 2013 12:38