none
Somar diferença de ontem com a de hoje RRS feed

  • Pergunta

  • Tenho esse select:

    WITH 
    CTE_A AS 
    (SELECT CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_CADASTRO)))AS DT_CADASTRO,
    COUNT(*) AS QTDEA FROM TBL_TRIAGEM 
    WHERE ID_TIPO_DOCUMENTO IN(2,3,4,9) AND CONVERT(VARCHAR(10),DT_CADASTRO,103) BETWEEN '06/04/2013' AND '25/04/2013' 
    GROUP BY CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_CADASTRO)))) ,
    CTE_B AS  
    (SELECT CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_LANCAMENTO)))AS DT_LANCAMENTO,
    COUNT(*) AS QTDEB FROM TBL_CADASTRO WHERE CONVERT(VARCHAR(10),DT_LANCAMENTO,103) 
    BETWEEN '06/04/2013' AND '25/04/2013' 
    GROUP BY CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),DT_LANCAMENTO))))

    SELECT    
    CONVERT(VARCHAR,A.DT_CADASTRO,103)AS DATA,A.QTDEA, B.QTDEB, -(A.QTDEA - B.QTDEB) AS DIFERENCA,   
    (A.QTDEA - B.QTDEB) AS EXCEDENTE,(B.QTDEB/2) AS MEDIA 
    FROM 
    CTE_A AS A  CROSS JOIN CTE_B AS B  
    WHERE 
    CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),A.DT_CADASTRO))) = 
    CONVERT(DATETIME, FLOOR(CONVERT(FLOAT(24),B.DT_LANCAMENTO))) 

    Gostaria de fazer o seguinte. Somar o excedente de ontem com o excedente de hoje. Não sei como faço isso.

    quarta-feira, 17 de abril de 2013 19:18

Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    with
        CTE_A as
        (
            SELECT ...
        ),
    
        CTE_B as
        (
            SELECT ...
        ),
    
        CTE_R AS
        (
            SELECT    
                CONVERT(VARCHAR, A.DT_CADASTRO, 103) AS DATA,
                A.QTDEA, 
                B.QTDEB, 
                -(A.QTDEA - B.QTDEB) AS DIFERENCA,
                (A.QTDEA - B.QTDEB) AS EXCEDENTE,
                (B.QTDEB/2) AS MEDIA,
                ROW_NUMBER() OVER(ORDER BY A.DT_CADASTRO) as RowNum
            FROM CTE_A AS A
            INNER JOIN CTE_B AS B  
                ON A.DT_CADASTRO = B.DT_LANCAMENTO
        )
    
    select
        h.*,
        h.Excedente + COALESCE(o.Excedente, 0) as ExcedenteAcumulado
    from CTE_R as h
    left join CTE_R as o
        on o.RowNum = h.RowNum - 1

    Espero que ajude.


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

    • Sugerido como Resposta Fabrizzio CaputoModerator quinta-feira, 18 de abril de 2013 12:57
    • Marcado como Resposta pnet quinta-feira, 18 de abril de 2013 20:41
    quarta-feira, 17 de abril de 2013 20:03

Todas as Respostas

  • Boa tarde,

    Experimente mais ou menos dessa forma:

    with
        CTE_A as
        (
            SELECT ...
        ),
    
        CTE_B as
        (
            SELECT ...
        ),
    
        CTE_R AS
        (
            SELECT    
                CONVERT(VARCHAR, A.DT_CADASTRO, 103) AS DATA,
                A.QTDEA, 
                B.QTDEB, 
                -(A.QTDEA - B.QTDEB) AS DIFERENCA,
                (A.QTDEA - B.QTDEB) AS EXCEDENTE,
                (B.QTDEB/2) AS MEDIA,
                ROW_NUMBER() OVER(ORDER BY A.DT_CADASTRO) as RowNum
            FROM CTE_A AS A
            INNER JOIN CTE_B AS B  
                ON A.DT_CADASTRO = B.DT_LANCAMENTO
        )
    
    select
        h.*,
        h.Excedente + COALESCE(o.Excedente, 0) as ExcedenteAcumulado
    from CTE_R as h
    left join CTE_R as o
        on o.RowNum = h.RowNum - 1

    Espero que ajude.


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

    • Sugerido como Resposta Fabrizzio CaputoModerator quinta-feira, 18 de abril de 2013 12:57
    • Marcado como Resposta pnet quinta-feira, 18 de abril de 2013 20:41
    quarta-feira, 17 de abril de 2013 20:03
  • Cara, como é que vocês conseguem fazer isso. Na mosca. Muito obrigado.
    quinta-feira, 18 de abril de 2013 20:41