[quote=”Roldao”:2zgk7x47]Boa Tarde pessoal , estou com uma pequena dificuldade é simples mas não sei o que faço.
estou com uma tabela onde tenho os campos ( codigo_cliente, nome_cliente, saldo_valor, tipo_pagamento.
segue um exemplo das informações da tabela abaixo
codigo nome Saldo Pagamento
1 Caio 1500 D
1 Caio 2000 C
estou tentando fazer uma consulta a onde eu busco pelo codigo do cliente, tenho que retorna o nome o saldo que seria o saldo do tipo de pagamento ‘C’ subraindo com saldo do tipo de pagamento ‘D’
valew galera abraços[/quote]
Segue a solução:
CREATE TABLE MOVIMENTACAO(
CODIGO_CLIENTE NUMBER NOT NULL,
NOME_CLIENTE VARCHAR2(64) NOT NULL,
SALDO_VALOR NUMBER(8,2) NOT NULL,
TIPO_PAGAMENTO CHAR NOT NULL
);
INSERT INTO MOVIMENTACAO(CODIGO_CLIENTE,NOME_CLIENTE,SALDO_VALOR,TIPO_PAGAMENTO) VALUES(1,'CAIO',1500,'D');
INSERT INTO MOVIMENTACAO(CODIGO_CLIENTE,NOME_CLIENTE,SALDO_VALOR,TIPO_PAGAMENTO) VALUES(1,'CAIO',2000,'C');
INSERT INTO MOVIMENTACAO(CODIGO_CLIENTE,NOME_CLIENTE,SALDO_VALOR,TIPO_PAGAMENTO) VALUES(2,'JUNIOR',2500,'D');
INSERT INTO MOVIMENTACAO(CODIGO_CLIENTE,NOME_CLIENTE,SALDO_VALOR,TIPO_PAGAMENTO) VALUES(2,'JUNIOR',3500,'C');
COMMIT;
SELECT NOME_CLIENTE,SUM(CASE WHEN TIPO_PAGAMENTO = 'D' THEN 1 * SALDO_VALOR WHEN TIPO_PAGAMENTO = 'C' THEN -1 * SALDO_VALOR END) SALDO
FROM MOVIMENTACAO
WHERE CODIGO_CLIENTE = 1
GROUP BY NOME_CLIENTE;
DROP TABLE MOVIMENTACAO;
Analisando a solução, inicialmente um SUM() resolveria, mas tem o detalhe, se for ‘C’ é negativo, mas esta armazenado positivo, então basta um CASE WHEN para trocar o sinal para negativo, depois fazer um SUM(), para trocar o sinal pra negativo basta multiplicar por -1.