Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

SELECT entre VIEW e tabelas

Consegui resolver. O moderador pode excluir. Obrigado!

4 respostas

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.

solução!

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

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software