none
Dúvida - SELECT RRS feed

  • Pergunta

  • Bom dia pessoal, tenho uma dúvida e um problema e gostaria de dividir com voces pois talvez alguem tenha uma solução para esse dilema.

    Estou fazendo um relatorio com base em uma tabela de contratos, e esses contratos possuem valores iniciais, e revisoes, porem na tabela nao ha o valor da revisao, epenas o saldo final. Vejam:

                           CONTRATO      |         REVISAO         |   VALOR ATUAL

    Registro 1:       000001                         -                     10.000,00

    Registro 2:       000001                      001                   15.000,00

    Registro 3:       000001                      002                   25.000,00

    Porem eu preciso calcular uma coluna com o valor da respectiva revisao, mas eu so tenho esse valor subtraindo o 'VALOR ATUAL DO REGISTRO 3 - VALOR ATUAL REGISTRO2', o resultado esperado seria o seguinte:

                           CONTRATO      |         REVISAO         |   VALOR ATUAL     |    VALOR REVISAO    |

    Registro 1:       000001                         -                     10.000,00                           0,00

    Registro 2:       000001                      001                   15.000,00                    5.000,00

    Registro 3:       000001                      002                   25.000,00                 10.000,00

    Alguem poderia me ajudar a como trazer a coluna 'VALOR REVISAO' ?

    Muito obrigado!

    segunda-feira, 29 de abril de 2013 15:32

Respostas

  • Tarsio,

    Segue uma possibilidade:

    --Table creation
    DECLARE @t1 TABLE
    (
    	Contrato	INT,
    	Revisao		INT,
    	Vl_Atual	DECIMAL(18,2)
    )
    
    --Data load
    INSERT INTO @t1(Contrato, Revisao, Vl_Atual) VALUES
    (1, NULL, 10000),
    (1, 1, 15000),
    (1, 2, 25000)
    
    --Final select
    SELECT
    	a.Contrato,
    	a.Revisao,
    	a.Vl_Atual,
    	ISNULL(a.Vl_Atual - (SELECT b.Vl_Atual FROM @t1 b WHERE b.Contrato = a.Contrato AND (b.Revisao = a.Revisao - 1 OR (a.Revisao = 1 AND b.Revisao IS NULL))), 0.00) As Vl_Revisao
    FROM @t1 a


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com

    segunda-feira, 29 de abril de 2013 15:46
    Moderador

Todas as Respostas

  • Tarsio,

    Segue uma possibilidade:

    --Table creation
    DECLARE @t1 TABLE
    (
    	Contrato	INT,
    	Revisao		INT,
    	Vl_Atual	DECIMAL(18,2)
    )
    
    --Data load
    INSERT INTO @t1(Contrato, Revisao, Vl_Atual) VALUES
    (1, NULL, 10000),
    (1, 1, 15000),
    (1, 2, 25000)
    
    --Final select
    SELECT
    	a.Contrato,
    	a.Revisao,
    	a.Vl_Atual,
    	ISNULL(a.Vl_Atual - (SELECT b.Vl_Atual FROM @t1 b WHERE b.Contrato = a.Contrato AND (b.Revisao = a.Revisao - 1 OR (a.Revisao = 1 AND b.Revisao IS NULL))), 0.00) As Vl_Revisao
    FROM @t1 a


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com

    segunda-feira, 29 de abril de 2013 15:46
    Moderador
  • Muito obrigado Fabrizzio!!!

    Realizei um teste inicial e aparentemente ira atender a minha necessidade!!!

    Qlq coisa volto a falar contigo!

    Obrigado novamente!

    Abraço,

    Tarsio Alvares

    segunda-feira, 29 de abril de 2013 15:51