Ir para conteúdo

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

 

Busque por PIVOT CASE IIF MYSQL 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por DoVaK
      Boa tarde,
       
      Estamos desenvolvendo um software wms (controle de estoque) que inicialmente funcionará na nuvem.
      Por ser um sistema complexo e com enorme quantidade de dados, estamos pensando em criar um banco de dados separado para cada empresa (cliente).
      Teriamos um banco de dados nosso onde estariam centralizadas algumas informações importantes, tais como as informações de cada empresa, dados para pagamento e os códigos que referenciariam o banco de dados especifico de cada cliente nosso (para fazer o redirecionamento correto no login).
      Seguem as dúvidas:
       
       - Esta seria uma boa forma de modelagem? 
       - Seria interessante ter o cadastro de todos os usuários no nosso banco de dados central ou deixar a tabela de usuários no banco de cada empresa?
       
      OBS: o SGBD é o MySQL.
       
      Obrigado pela ajuda.
       
      Jonathan.
    • Por JeysonRomualdo
      <?php //conexão com banco de dados.   $pdo = new PDO("mysql:dbname=cadastro", "root", "");   ?>   <html> <head> <title>Autenticando Usuario</title> <script type="text/javascript"> function loginsussesfully() { setTimeout("window.location='painel.php'", 5000); } function loginfailed(){ setTimeout("window.location='login.php'", 5000); } </script> </head> <body>   <?php //capturando informaçoes digitadas pelo usuario $email = $_POST['email']; $senha = $_POST['senha']; $sql = "SELECT * FROM usuarios WHERE email = '$email' and senha = '$senha'"; $row = mysql_num_rows($sql); if ($row > 0) { session_start(); $SESSION['email'] = $_POST['email']; $SESSION['senha'] = $_POST['senha']; echo "<center>Você foi autenticado com susseco!</center>"; echo "<script>loginsuccesfully</script>"; } else{ echo "<center>Nome de usuario ou senha invalidos!</center>"; echo "<script>loginfailed</script>"; } ?>   </body>   </html> erro na linha 25... nao consigo identificar o que pode estar errado ou faltando
    • Por Fabricio N. B
      Estou fazendo um projeto da escola que é um sistema para informatizar uma locadora de filmes, porém preciso listar os filmes mais alugados no mês e não estou sabendo fazer essa parte.
       
      Abaixo segue minhas tabelas mysql:
       
      create table clientes (
      id BIGINT NOT NULL AUTO_INCREMENT,
      nome VARCHAR(255),
      email VARCHAR(255),
      rg VARCHAR(255),
      endereco VARCHAR(255),
      dataNascimento DATE,
      primary key (id)
      );
       
       
      create table filmes (
      id BIGINT NOT NULL AUTO_INCREMENT,
      titulo VARCHAR(255),
      genero VARCHAR(255),
      anoLancamento int,
      primary key (id)
      );
       
       
      create table alugueis (
      id BIGINT NOT NULL AUTO_INCREMENT,
      cliente bigint,
      filme bigint,
      dataAluguel DATE,
      dataDevolucao DATE,
      primary key (id),
      foreign key (cliente) references clientes(id),
      foreign key (filme) references filmes(id)
      );
       
       
      Desde já agradeço.
    • Por M. Alberto
      O que preciso alterar para acessar meu banco de dados remotamente?
       
      Tenho o IP e outros dados... como faço com este código?
       
      <?php $link = mysql_connect('localhost', 'USUARIO_NOME', 'SENHA_ACESSO'); if (!$link) { die('Não conseguiu conectar: ' . mysql_error()); } $db_selected = mysql_select_db('BANCODEDADOS_NOME', $link); if (!$db_selected) { die ('Não pode selecionar o banco : ' . mysql_error()); } $rst_pedidos=mysql_query("SELECT * FROM pedidosgarotao WHERE impresso='nao' ORDER BY id",$link); $num_pedidos=mysql_num_rows($rst_pedidos); if ($num_pedidos==0) { ?>  
    • Por M. Alberto
      Estou realizando a migração de meu site que utiliza um banco de dados em mySQL PHP porém estou obtendo erro.
       
      Criei o banco de dados e fiz upload dos arquivos, porém agora neste servidor não roda de maneira alguma. Alguém poderia me ajudar ?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.