EXTRATO BANC?RIO
Bom dia a todos.
Preciso fazer um extrato bancário utilizando apenas uma consulta em SQL. A estrutura da tabela é a que segue abaixo:
- Data;Operação;Valor
Onde Data possuà a data do movimento, Operação é alimentado com D e C onde D=Crédito e C=Crédito e Valor é o valor da operação.
No relatório de extrato bancário a estrutura deve ser a seguinte:
Saldo Anterior -----------------------------> 1.000,00
Data Operação Valor Saldo
01/05/2014 C 100,00 1.100,00
02/05/2014 D 300,00 800,00
03/05/2014 D 400,00 400,00
Saldo Atual --------------------------------> 800,00
Como faço para calcular a coluna SALDO que não existe na estrutura do banco de dados?
Obrigado.
Preciso fazer um extrato bancário utilizando apenas uma consulta em SQL. A estrutura da tabela é a que segue abaixo:
- Data;Operação;Valor
Onde Data possuà a data do movimento, Operação é alimentado com D e C onde D=Crédito e C=Crédito e Valor é o valor da operação.
No relatório de extrato bancário a estrutura deve ser a seguinte:
Saldo Anterior -----------------------------> 1.000,00
Data Operação Valor Saldo
01/05/2014 C 100,00 1.100,00
02/05/2014 D 300,00 800,00
03/05/2014 D 400,00 400,00
Saldo Atual --------------------------------> 800,00
Como faço para calcular a coluna SALDO que não existe na estrutura do banco de dados?
Obrigado.
PITERGALDIANO,
segue um exemplo de um select exemplo para você poder usar como referência. Dependendo do banco de dados, você pode usar os apelidos das sub-consultas para efetuar o cálculo. Caso não funcione com o seu banco de dados, você pode tentar esta pequena variação
1º versão
SELECT
(
SELECT
SUM(valor)
FROM
movimento
WHERE
tipo = [ô]C[ô] AND
data_movimentacao >= movimento_principal.data_movimentacao AND
data_movimentacao <= movimento_principal.data_movimentacao AND
codigo_cliente = movimento_principal.codigo_cliente
) AS valor_credito,
(
SELECT
SUM(valor)
FROM
movimento
WHERE
tipo = [ô]D[ô] AND
data_movimentacao >= movimento_principal.data_movimentacao AND
data_movimentacao <= movimento_principal.data_movimentacao AND
codigo_cliente = movimento_principal.codigo_cliente
) AS valor_debito,
(valor_credito - valor_debito) AS valor_saldo
FROM
movimento AS movimento_principal
WHERE
codigo_cliente = 1 AND
data_movimentacao >= [ô]YYYY/MM/DD[ô] AND
data_movimentacao <= [ô]YYYY/MM/DD[ô]
2º versão
SELECT
(
(
SELECT
SUM(valor)
FROM
movimento
WHERE
tipo = [ô]C[ô] AND
data_movimentacao >= movimento_principal.data_movimentacao AND
data_movimentacao <= movimento_principal.data_movimentacao AND
codigo_cliente = movimento_principal.codigo_cliente
) -
(
SELECT
SUM(valor)
FROM
movimento
WHERE
tipo = [ô]D[ô] AND
data_movimentacao >= movimento_principal.data_movimentacao AND
data_movimentacao <= movimento_principal.data_movimentacao AND
codigo_cliente = movimento_principal.codigo_cliente
)
) AS valor_saldo
FROM
movimento AS movimento_principal
WHERE
codigo_cliente = 1 AND
data_movimentacao >= [ô]YYYY/MM/DD[ô] AND
data_movimentacao <= [ô]YYYY/MM/DD[ô]
segue um exemplo de um select exemplo para você poder usar como referência. Dependendo do banco de dados, você pode usar os apelidos das sub-consultas para efetuar o cálculo. Caso não funcione com o seu banco de dados, você pode tentar esta pequena variação
1º versão
SELECT
(
SELECT
SUM(valor)
FROM
movimento
WHERE
tipo = [ô]C[ô] AND
data_movimentacao >= movimento_principal.data_movimentacao AND
data_movimentacao <= movimento_principal.data_movimentacao AND
codigo_cliente = movimento_principal.codigo_cliente
) AS valor_credito,
(
SELECT
SUM(valor)
FROM
movimento
WHERE
tipo = [ô]D[ô] AND
data_movimentacao >= movimento_principal.data_movimentacao AND
data_movimentacao <= movimento_principal.data_movimentacao AND
codigo_cliente = movimento_principal.codigo_cliente
) AS valor_debito,
(valor_credito - valor_debito) AS valor_saldo
FROM
movimento AS movimento_principal
WHERE
codigo_cliente = 1 AND
data_movimentacao >= [ô]YYYY/MM/DD[ô] AND
data_movimentacao <= [ô]YYYY/MM/DD[ô]
2º versão
SELECT
(
(
SELECT
SUM(valor)
FROM
movimento
WHERE
tipo = [ô]C[ô] AND
data_movimentacao >= movimento_principal.data_movimentacao AND
data_movimentacao <= movimento_principal.data_movimentacao AND
codigo_cliente = movimento_principal.codigo_cliente
) -
(
SELECT
SUM(valor)
FROM
movimento
WHERE
tipo = [ô]D[ô] AND
data_movimentacao >= movimento_principal.data_movimentacao AND
data_movimentacao <= movimento_principal.data_movimentacao AND
codigo_cliente = movimento_principal.codigo_cliente
)
) AS valor_saldo
FROM
movimento AS movimento_principal
WHERE
codigo_cliente = 1 AND
data_movimentacao >= [ô]YYYY/MM/DD[ô] AND
data_movimentacao <= [ô]YYYY/MM/DD[ô]
Tópico encerrado , respostas não são mais permitidas