Consegui resolver. O moderador pode excluir. Obrigado!
Consegui resolver. O moderador pode excluir. Obrigado!
Oi Ivan tudo bem?
Poderia compartilhar conosco o problema e a solução por genti. Assim outros alunos no futuro que passarem pelo mesmo problema vão conseguir achar a solução.
Olá André,
Eu não consegui fazer um select único para obter o resultado desejado, que era juntar informações de despesas com orçamento. Então criei uma view para informações de orçamento e um select para obter informações de despesas, juntando com as informações da view. Não sei se foi a melhor solução mas foi como eu consegui o resultado desejado.
Para praticar view e pesquisa com select, criei uma VIEW com o seguinte resultado de orçamento:
USE sdp;
CREATE VIEW vw_orcamento_mensal
AS
SELECT d.id, d.nome, data_previsao, SUM(valor_previsto) AS valor_previsto
FROM previsoes p, orcamentos o
INNER JOIN dres d ON d.id = o.dre_id
WHERE o.id = p.orcamento_id
GROUP BY d.id, d.nome, data_previsao
O resultado pode ser visto aqui:
https://snag.gy/c7f0gY.jpg
Criei também uma consulta para pegar as despesas do mês:
use sdp;
select d.id, d.nome,
SUM(CASE
WHEN (p.valor_pago != 0.00 OR p.valor_pago IS NOT NULL) AND
(data_vencimento_atual BETWEEN '2019-08-05' AND '2019-08-05')
THEN p.valor_pago
ELSE 0.00
END) AS 'pago_mes',
SUM(CASE
WHEN (p.valor_pago = 0.00 OR p.valor_pago IS NULL) AND
(data_vencimento_atual BETWEEN '2019-08-05' AND '2019-08-05')
THEN p.valor_total_parcela
ELSE 0.00
END) AS 'pagar_mes'
FROM parcelas_pagar p, contas_pagar c
inner join dres d ON d.id = c.dre_id
where c.id = p.conta_pagar_id
group by d.id, d.nome
order by pagar_mes desc, nome
o resultado pode ser visto aqui:
https://snag.gy/rT0vH9.jpg
Com os resultados ok, fiz um útimo select para juntar os dois resultados.
O que fiz:
use sdp;
select d.id, d.nome, prv.valor_previsto AS valor_previsto,
SUM(CASE
WHEN (p.valor_pago != 0.00 OR p.valor_pago IS NOT NULL) AND (data_vencimento_atual BETWEEN '2019-08-05' AND '2019-08-05')
THEN p.valor_pago
ELSE 0.00
END) AS 'pago_mes',
SUM(CASE
WHEN (p.valor_pago = 0.00 OR p.valor_pago IS NULL) AND (data_vencimento_atual BETWEEN '2019-08-05' AND '2019-08-05')
THEN p.valor_total_parcela
ELSE 0.00
END) AS 'pagar_mes'
FROM parcelas_pagar p, contas_pagar c
inner join dres d ON d.id = c.dre_id
inner join vw_orcamento_mensal prv ON prv.id = c.dre_id
where c.id = p.conta_pagar_id AND
YEAR(prv.data_previsao) = 2019 AND MONTH(prv.data_previsao) = 08
group by d.id, d.nome, valor_previsto
order by pagar_mes desc, nome
Finalmente, o resultado esperado:
https://snag.gy/Iu8KB2.jpg
Obrigado e bons estudos!!!