Jump to content

Recommended Posts

Boa noite! 

Estou enfrentando uma dificuldade para montar o relatório de despesas, preciso gerar um documento que apresente o gasto total de cada categoria separando esse valor por mês, até o momento consegui elaborar uma query que busca o total apenas dos meses nos quais existem lançamentos, o problema é que repete várias vezes o nome do mês e quando o mesmo não tem lançamentos é simplesmente saltado para o próximo. Gostaria que me dessem uma dica de como definir o valor 0 ou NULL para os meses que não possuem registros.

 

OBS: Anexei um arquivo que apresenta o resultado atual da minha query, um arquivo ilustrativo feito no Excel apenas para exemplificar melhor o objetivo,  e a estrutura da tabela.

estrutura.jpg

query atual.jpeg

resultado pretendido.jpg

Share this post


Link to post
Share on other sites

Pelo que entendi seu problema e "pivotear" um resultado de uma consulta.

 

Busque por PIVOT CASE IIF MYSQL 

 

Share this post


Link to post
Share on other sites

Bom dia!

Consegui resolver o problema, pesquisando em alguns sites gringos, encontrei a seguinte abordagem:


 

SELECT 
    SUM(CASE WHEN MONTH(data) = 1 THEN valor ELSE 0 END) AS 'Janeiro',
    SUM(CASE WHEN MONTH(data) = 2 THEN valor ELSE 0 END) AS 'Fevereiro',
    SUM(CASE WHEN MONTH(data) = 3 THEN valor ELSE 0 END) AS 'Março',
    SUM(CASE WHEN MONTH(data) = 4 THEN valor ELSE 0 END) AS 'Abril',
    SUM(CASE WHEN MONTH(data) = 5 THEN valor ELSE 0 END) AS 'Maio',
    SUM(CASE WHEN MONTH(data) = 6 THEN valor ELSE 0 END) AS 'Junho',
    SUM(CASE WHEN MONTH(data) = 7 THEN valor ELSE 0 END) AS 'Julho',
    SUM(CASE WHEN MONTH(data) = 8 THEN valor ELSE 0 END) AS 'Agosto',
    SUM(CASE WHEN MONTH(data) = 9 THEN valor ELSE 0 END) AS 'Setembro',
    SUM(CASE WHEN MONTH(data) = 10 THEN valor ELSE 0 END) AS 'Outubro',
    SUM(CASE WHEN MONTH(data) = 11 THEN valor ELSE 0 END) AS 'Novembro',
    SUM(CASE WHEN MONTH(data) = 12 THEN valor ELSE 0 END) AS 'Dezembro'
FROM despesas
WHERE YEAR(data) = 2018 AND categoria_id = 5

Simples e objetivo, sem precisar realizar consultas em outras tabelas. Mesmo assim, agradeço muito ao kim.y e ao Motta, pesquisando suas dicas de funções consegui alcançar o resultado pretendido. Muito Obrigado!

 

 

query.jpg

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By guzulino
      Então... eu preciso inserir uma paulada de dados em um banco de dados de vez em quando, eu até consigo importar de um CSV pro banco, mas eu preciso fazer isso através do php e eu não tenho nem ideia de como fazer isso, procurei por aqui e não achei, se alguém tem alguma resposta ou referência, manda o link que eu vou dar uma olhada. Valeu.
    • By DouglasVitor
      Boa tarde,
      Estou a pelo menos 3 semanas tentando instalar o MySQL Server no Windows 10 Pro, mas sem sucesso.
      Baixo o instalador mas no momento de obstar o MySQL Server, apresenta uma mensagem de falha. Tentei a versão mais nova e antiga, mas a falha e a mesma. Alguém poderia me ajudar com este problema? É necessário alguma configuração no Windows?
      Desde já agradeço.
    • By Dani_Ambrosio
      Preciso criar uma coluna em uma tabela já existente, porém os dados dessa nova coluna vão depender de outra tabela
      Ex:
      tenho a tabela faturamento e nela eu preciso criar uma nova coluna que vai chamar fat_removido e os dados dessa coluna vão depender de uma outra tabela que se chama Faturamento removido.
      tanto as tabelas faturamento e a faturamento removido tem o ID_faturamento, quando o mesmo constar nas duas tabelas a nova coluna deverá ser preenchida com Sim e quando não constar deve ser preenchida com Não 
      Como faço isso?
    • By Bruno - BuhDesign
      Bom dia pessoal.
      Bom, estou trabalhando no banco de dados MySQL de um cliente, onde ele salva o curso da seguinte forma:
       
      NOME DO CURSO || LONDRINA - PR
      NOME DO CURSO || CURITIBA - PR
       
      Eu preciso fazer uma contagem, por curso, independente da cidade. Ou seja, se eu fizer um GROUP BY ele não
      vai juntar LONDRINA e CURITIBA. Como posso contornar esta divergência?  Teria uma forma de agrupar, até encontrar
      o carácter || ou agrupar por "semelhantes"?
      De fato, LONDRINA e CURITIBA possuem o mesmo curso e precisavam aparecer na mesma contagem. 
      Muito obrigado desde já.
    • By JenneferBarbosa
      Pessoal, sou nova aqui no Fórum e estou começando a estudar PHP. Estou com dúvidas quanto a pesquisa com vários campos, consegui fazer para um campo só, porém quando tento para vários campos não funciona. Fiz algumas pesquisas e só consegui achar buscas com 'selects e options' e eu queria que ele pegasse o que foi digitado no input e fizesse a busca, mas o usuário não precisaria informar todos os campos (se não quisesse). Quando clico em 'Pesquisar' aparece todos os dados do banco. E uma outra dúvida, como faz para que os dados pesquisados sejam exibidos na mesma tela (abaixo do formulário de pesquisa)
      <form method="POST" id="form-pesquisa" action="busca.php"> Livro: <input type="text" name="nome" id="nome" placeholder="Fulano de Tal"> Autor: <input type="text" name="autor" id="autor" placeholder="Fulano de Tal"> Edicao: <input type="text" name="edicao" id="edicao" placeholder="Fulano de Tal"> <input type="submit" name="enviar" value="Pesquisar"> </form> <ul class="resultado"></ul> $nome = $_POST['nome']; $autor = $_POST['autor']; $edicao = $_POST['edicao']; //Pesquisar no banco de dados nome do livro referente a palavra digitada pelo usuário $livros = "SELECT * FROM livro WHERE nome OR autor OR edicao ORDER BY nome ASC"; $resultado_livros = mysqli_query($conn, $livros); if (mysqli_num_rows($resultado_livros) <= 0) { echo "Nenhum livro encontrado..."; } else { while ($rows = mysqli_fetch_assoc($resultado_livros)) { echo "<li>" . $rows['codigo'] . "</li>"; echo "<li>" . $rows['nome'] . "</li>"; echo "<li>" . $rows['autor'] . "</li>"; echo "<li>" . $rows['edicao'] . "</li>"; } } . Como se ele fizesse a busca internamente e mostrasse ao usuário o que ele pesquisou sem ele sair da tela em que está o form
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.