Usuário com melhor resposta
Como colocar Crédito e Débito em duas colunas para calcular a diferença?

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
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
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
-
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
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
-
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
-