none
Como colocar Crédito e Débito em duas colunas para calcular a diferença? RRS feed

  • Pergunta

  • Olá pessoal,

    Tenho duas consultas:

    1ª Consulta CRÉDITO:


    SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO , CREDITO = A.CREDITO,
            TOTAL_CREDITOS = SUM(A.VALOR)

    FROM    CLANCA A (NOLOCK)

    WHERE YEAR(A.DATA) = 2012 AND
    A.CREDITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')

    GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.CREDITO

    ORDER BY A.CREDITO, A.CODDEPARTAMENTO


    2ª Consulta DÉBITO:


    SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO ,DEBITO = A.DEBITO,
            TOTAL_DEBITOS = SUM(A.VALOR)

    FROM    CLANCA A (NOLOCK)
    WHERE YEAR(A.DATA) = 2012 AND
    A.DEBITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')

    GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.DEBITO

    ORDER BY A.DEBITO, A.CODDEPARTAMENTO


    Estas consultas estão me retornando assim:

    CRÉDITOS:

    ANO DEPARTAMENTO CREDITO TOTAL_CREDITOS
    2012 01.01 2.1.1.06.0001 410,00
    2012 01.03 2.1.1.06.0001 6924,43

    DÉBITOS:

    ANO DEPARTAMENTO DEBITO TOTAL_DEBITOS
    2012 01.01 2.1.1.06.0001 2590,83
    2012 01.03 2.1.1.06.0001 1140,42

    E preciso que sejam exibidos assim:

    ANO DEPARTAMENTO COD_CREDITO CREDITO COD_DEBITO DEBITO TOTAL
    2012 01.01 2.1.1.06.0001 410,00 2.1.1.06.0001 2590,83 -2180,83
    2012 01.03 2.1.1.06.0001 6924,43 2.1.1.06.0001 1140,42 5784,01

    Será que alguém poderia me ajudar?

    Tentei fazer baseado na consulta abaixo, mas não deu certo:

    SELECT A.Av_Codigo, A.Av_AnoLetivo, D.Perg_Codigo,
    D.Resp_Codigo, P.Perg_Nome, C.Cur_Nome, C.Cur_Classificacao,
    Pr.Prof_Nome,
    IsNull((
    SELECT R.Resp_Codigo
    FROM Tb_AvaliaDocDet AS R
    WHERE R.Resp_Codigo = 1
    ), 0) AS SIM,
    IsNull((
    SELECT R.Resp_Codigo
    FROM Tb_AvaliaDocDet AS R
    WHERE R.Resp_Codigo = 2
    ), 0) AS NAO,

    IsNull((
    SELECT R.Resp_Codigo
    FROM Tb_AvaliaDocDet AS R
    WHERE R.Resp_Codigo = 3
    ), 0) S VEZES',

    IsNull((
    SELECT R.Resp_Codigo
    FROM Tb_AvaliaDocDet AS R
    WHERE R.Resp_Codigo = 4
    ), 0) AS DESCONHEO

    FROM Tb_avaliadoc AS A
    JOIN Tb_AvaliaDocDet AS D ON D.Av_Codigo = A.Av_Codigo
    JOIN Tb_professores AS Pr ON Pr.Prof_Codigo = A.Prof_Codigo
    JOIN Tb_cursos AS C ON C.Cur_Codigo = A.Cur_Codigo
    JOIN Tb_perguntas AS P ON P.Perg_Codigo = D.Perg_Codigo
    ORDER BY A.Cur_Codigo, A.Prof_Codigo


    Grato,

    Ilano.






    • Editado ilanocf quarta-feira, 30 de janeiro de 2013 11:07
    quarta-feira, 30 de janeiro de 2013 10:50

Respostas

  • Bom dia

    Sugiro voce usar as 2 concultas como subselects, fazendo a ligação usando os campos, ANO e ANO, DEPARTAMENTO e DEPARTAMENTO, CREDITO e DEBITO, calculando o totoal como sendo credito - debitos

    SELECT	A.ANO,A.DEPARTAMENTO,A.CREDITO,A.TOTAL_CREDITOS,B.DEBITO,B.TOTAL_DEBITOS, (A.TOTAL_CREDITOS - B.TOTAL_DEBITOS) TOTAL
    FROM	(		
    		SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO , CREDITO = A.CREDITO,
    				 TOTAL_CREDITOS = SUM(A.VALOR)
    		FROM    CLANCA A (NOLOCK)
    		WHERE YEAR(A.DATA) = 2012 AND
    		 A.CREDITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')
    		GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.CREDITO
    		) A
    JOIN	(		
    		SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO ,DEBITO = A.DEBITO,
    				 TOTAL_DEBITOS = SUM(A.VALOR)
    		FROM    CLANCA A (NOLOCK)
    		 WHERE YEAR(A.DATA) = 2012 AND
    		 A.DEBITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')
    		GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.DEBITO
    		) B
    ON		A.ANO = B.ANO
    AND		A.DEPARTAMENTO = B.DEPARTAMENTO
    AND		A.CREDITO = B.DEBITO		
    

    • Sugerido como Resposta Jose Marcelo quarta-feira, 30 de janeiro de 2013 11:45
    • Marcado como Resposta Ricardo Russo segunda-feira, 18 de fevereiro de 2013 12:54
    quarta-feira, 30 de janeiro de 2013 11:39
  • IlanoCf, você pode fazer da seguinte forma:

    SELECT A.ANO, A.DEPARTAMENTO, A.CREDITO, A.TOTAL_CREDITOS, B.DEBITO, B.TOTAL_DEBITOS, A.TOTAL_CREDITOS-B.TOTAL_DEBITOS
    FROM (
    SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO , CREDITO = A.CREDITO,TOTAL_CREDITOS = SUM(A.VALOR)
    FROM    CLANCA A (NOLOCK)
    WHERE YEAR(A.DATA) = 2012 AND A.CREDITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')
    GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.CREDITO) A
    INNER JOIN (
    SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO ,DEBITO = A.DEBITO,TOTAL_DEBITOS = SUM(A.VALOR)
    FROM    CLANCA A (NOLOCK)
    WHERE YEAR(A.DATA) = 2012 AND A.DEBITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')
    GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.DEBITO) B ON B.ANO = A.ANO AND B.DEPARTAMENTO = A.DEPARTAMENTO AND B.DEBITO = A.CREDITO
    ORDER BY A.ANO, A.DEPARTAMENTO, A.CREDITO

    Na clausula ON vc coloca a chave que vai relacionar as duas subquerys.


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Ricardo Russo segunda-feira, 18 de fevereiro de 2013 12:54
    quarta-feira, 30 de janeiro de 2013 11:43

Todas as Respostas

  • Bom dia

    Sugiro voce usar as 2 concultas como subselects, fazendo a ligação usando os campos, ANO e ANO, DEPARTAMENTO e DEPARTAMENTO, CREDITO e DEBITO, calculando o totoal como sendo credito - debitos

    SELECT	A.ANO,A.DEPARTAMENTO,A.CREDITO,A.TOTAL_CREDITOS,B.DEBITO,B.TOTAL_DEBITOS, (A.TOTAL_CREDITOS - B.TOTAL_DEBITOS) TOTAL
    FROM	(		
    		SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO , CREDITO = A.CREDITO,
    				 TOTAL_CREDITOS = SUM(A.VALOR)
    		FROM    CLANCA A (NOLOCK)
    		WHERE YEAR(A.DATA) = 2012 AND
    		 A.CREDITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')
    		GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.CREDITO
    		) A
    JOIN	(		
    		SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO ,DEBITO = A.DEBITO,
    				 TOTAL_DEBITOS = SUM(A.VALOR)
    		FROM    CLANCA A (NOLOCK)
    		 WHERE YEAR(A.DATA) = 2012 AND
    		 A.DEBITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')
    		GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.DEBITO
    		) B
    ON		A.ANO = B.ANO
    AND		A.DEPARTAMENTO = B.DEPARTAMENTO
    AND		A.CREDITO = B.DEBITO		
    

    • Sugerido como Resposta Jose Marcelo quarta-feira, 30 de janeiro de 2013 11:45
    • Marcado como Resposta Ricardo Russo segunda-feira, 18 de fevereiro de 2013 12:54
    quarta-feira, 30 de janeiro de 2013 11:39
  • IlanoCf, você pode fazer da seguinte forma:

    SELECT A.ANO, A.DEPARTAMENTO, A.CREDITO, A.TOTAL_CREDITOS, B.DEBITO, B.TOTAL_DEBITOS, A.TOTAL_CREDITOS-B.TOTAL_DEBITOS
    FROM (
    SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO , CREDITO = A.CREDITO,TOTAL_CREDITOS = SUM(A.VALOR)
    FROM    CLANCA A (NOLOCK)
    WHERE YEAR(A.DATA) = 2012 AND A.CREDITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')
    GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.CREDITO) A
    INNER JOIN (
    SELECT ANO = YEAR(A.DATA), DEPARTAMENTO = A.CODDEPARTAMENTO ,DEBITO = A.DEBITO,TOTAL_DEBITOS = SUM(A.VALOR)
    FROM    CLANCA A (NOLOCK)
    WHERE YEAR(A.DATA) = 2012 AND A.DEBITO IN('2.1.1.06.0001', '2.1.1.06.0002', '2.1.1.06.0003', '2.1.1.06.0004')
    GROUP BY YEAR(A.DATA),A.CODDEPARTAMENTO ,A.DEBITO) B ON B.ANO = A.ANO AND B.DEPARTAMENTO = A.DEPARTAMENTO AND B.DEBITO = A.CREDITO
    ORDER BY A.ANO, A.DEPARTAMENTO, A.CREDITO

    Na clausula ON vc coloca a chave que vai relacionar as duas subquerys.


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Ricardo Russo segunda-feira, 18 de fevereiro de 2013 12:54
    quarta-feira, 30 de janeiro de 2013 11:43
  • Valeu galera! Deu certinho...

    Muito obrigado a atenção de todos.

    quarta-feira, 30 de janeiro de 2013 12:55