EXTRATO BANC?RIO

PITERGALDIANO 25/06/2014 07:47:49
#439148
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.
NETMANIA 25/06/2014 07:57:24
#439149
Resposta escolhida
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[ô]
Tópico encerrado , respostas não são mais permitidas