Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

acdestefani

[Resolvido] Relatório a partir de consulta sql

Recommended Posts

Olá pessoal!

 

Estou criando um relatório a partir de uma consulta sql (abaixo).

 

SELECT MONTH( s.dataencerram ) AS mes, YEAR( s.dataencerram ) AS ano, e.siglasecretaria AS secretaria, COUNT( e.siglasecretaria ) AS quantidade
FROM solicitacao AS s
JOIN encaminhamento e ON e.codsolicitacao = s.codsolicitacao
WHERE year( dataencerram ) = '2010'
AND (
dataencerram IS NOT NULL
OR dataencerram <> '0000-00-00'
)
AND tipo = 'Sugestão'
GROUP BY MONTH( s.dataencerram ) , e.siglasecretaria

Executando a consulta no Phpmyadmin, ela é mostrada dessa maneira:

 

Imagem Postada

 

Gostaria de criar um relatório em PHP, que ficasse dessa maneira:

 

Imagem Postada

 

Alguém poderia me dar uma ajuda?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer poder editar o conteudo das grades? Sem sim tente usar isso:

http://forum.imasters.com.br/index.php?/topic/241837-datagrid-completo/

http://www.phpgrid.com/grid/

 

Se não qual seria exatamente a dificuldades? Seria aplicar o PHP+Mysql+HTML ou seria criar as tabelas HTML? Poderia ser mais expecifico amigo?

 

Atenciosamente Silverfox

Compartilhar este post


Link para o post
Compartilhar em outros sites

no caso seu sql os meses estao em linhas você podia transformar em colunas assim ja facilita

 

SELECT 
e.siglasecretaria AS secretaria,
COUNT(CASE WHEN MONTH( s.dataencerram ) = 1 THEN e.siglasecretaria ELSE 0 END  ) as "JAN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 2 THEN e.siglasecretaria ELSE 0 END  ) as "FEV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 3 THEN e.siglasecretaria ELSE 0 END  ) as "MAR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 4 THEN e.siglasecretaria ELSE 0 END  ) as "ABR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 5 THEN e.siglasecretaria ELSE 0 END  ) as "MAI",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 6 THEN e.siglasecretaria ELSE 0 END  ) as "JUN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 7 THEN e.siglasecretaria ELSE 0 END  ) as "JUL",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 8 THEN e.siglasecretaria ELSE 0 END  ) as "AGO",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 9 THEN e.siglasecretaria ELSE 0 END  ) as "SET",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 10 THEN e.siglasecretaria ELSE 0 END  ) as "OUT",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 11 THEN e.siglasecretaria ELSE 0 END  ) as "NOV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 12 THEN e.siglasecretaria ELSE 0 END  ) as "DEZ"
FROM
solicitacao AS s
JOIN 
encaminhamento e ON e.codsolicitacao = s.codsolicitacao
WHERE
year( s.dataencerram ) = 2010
AND 
tipo = 'Sugestão'
GROUP 
e.siglasecretaria

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda pessoal!

 

silverfox

 

A tabela eu consigo criá-la. A minha dificuldade está em como pegar os valores e colocá-los na tabela.

 

goruks

 

Tentei usar a consulta que você me passou, mas retorna o seguinte erro:

 

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'e.siglasecretaria

LIMIT 0, 30' at line 1

 

Obrigado!

 

goruks

 

Acrescentei o "BY" no final do comando (GROUP BY),conforme mostrado abaixo, e o erro não ocorre mais.

 

SELECT 
e.siglasecretaria AS secretaria,
COUNT(CASE WHEN MONTH( s.dataencerram ) = 1 THEN e.siglasecretaria ELSE 0 END  ) as "JAN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 2 THEN e.siglasecretaria ELSE 0 END  ) as "FEV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 3 THEN e.siglasecretaria ELSE 0 END  ) as "MAR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 4 THEN e.siglasecretaria ELSE 0 END  ) as "ABR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 5 THEN e.siglasecretaria ELSE 0 END  ) as "MAI",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 6 THEN e.siglasecretaria ELSE 0 END  ) as "JUN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 7 THEN e.siglasecretaria ELSE 0 END  ) as "JUL",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 8 THEN e.siglasecretaria ELSE 0 END  ) as "AGO",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 9 THEN e.siglasecretaria ELSE 0 END  ) as "SET",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 10 THEN e.siglasecretaria ELSE 0 END  ) as "OUT",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 11 THEN e.siglasecretaria ELSE 0 END  ) as "NOV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 12 THEN e.siglasecretaria ELSE 0 END  ) as "DEZ"
FROM
solicitacao AS s
JOIN 
encaminhamento e ON e.codsolicitacao = s.codsolicitacao
WHERE
year( s.dataencerram ) = 2010
AND 
tipo = 'Sugestão'
GROUP BY
e.siglasecretaria

O problema é que está retornando o total e repetindo em todos os meses, conforme figura abaixo:

 

Imagem Postada

 

O correto seria assim:

 

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma pequena alteração na consulta que o goruks me passou e funcionou:

 

Alterei o trecho "ELSE 0 END" para "ELSE null END", ficando assim:

SELECT 
e.siglasecretaria AS secretaria,
COUNT(CASE WHEN MONTH( s.dataencerram ) = 1 THEN e.siglasecretaria ELSE null END  ) as "JAN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 2 THEN e.siglasecretaria ELSE null END  ) as "FEV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 3 THEN e.siglasecretaria ELSE null END  ) as "MAR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 4 THEN e.siglasecretaria ELSE null END  ) as "ABR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 5 THEN e.siglasecretaria ELSE null END  ) as "MAI",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 6 THEN e.siglasecretaria ELSE null END  ) as "JUN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 7 THEN e.siglasecretaria ELSE null END  ) as "JUL",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 8 THEN e.siglasecretaria ELSE null END  ) as "AGO",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 9 THEN e.siglasecretaria ELSE null END  ) as "SET",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 10 THEN e.siglasecretaria ELSE null END  ) as "OUT",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 11 THEN e.siglasecretaria ELSE null END  ) as "NOV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 12 THEN e.siglasecretaria ELSE null END  ) as "DEZ"
FROM
solicitacao AS s
JOIN 
encaminhamento e ON e.codsolicitacao = s.codsolicitacao
WHERE
year( s.dataencerram ) = 2010
AND 
tipo = 'Sugestão'
GROUP BY
e.siglasecretaria

Imagem Postada

 

Agora vou tentar exibir o resultado no PHP.

 

Será que é possível totalizar por mês?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Agora vou tentar exibir o resultado no PHP.

 

Será que é possível totalizar por mês?

 

 

hmm interessante usei a sintax do oracle por isso o 0 nao deve ter funcionado.

teste o comando WITH ROLLUP depois do group by para adicionar o somatorio por coluna ou da para somar no php mesmo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela ajuda goruks!

 

Acrescentei o comando WITH ROLLUP, como você mencionou, e a totalização funcionou corretamente.

 

A consulta ficou asssim:

 

SELECT 
e.siglasecretaria AS secretaria,
COUNT(CASE WHEN MONTH( s.dataencerram ) = 1 THEN e.siglasecretaria ELSE null END  ) as "JAN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 2 THEN e.siglasecretaria ELSE null END  ) as "FEV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 3 THEN e.siglasecretaria ELSE null END  ) as "MAR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 4 THEN e.siglasecretaria ELSE null END  ) as "ABR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 5 THEN e.siglasecretaria ELSE null END  ) as "MAI",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 6 THEN e.siglasecretaria ELSE null END  ) as "JUN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 7 THEN e.siglasecretaria ELSE null END  ) as "JUL",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 8 THEN e.siglasecretaria ELSE null END  ) as "AGO",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 9 THEN e.siglasecretaria ELSE null END  ) as "SET",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 10 THEN e.siglasecretaria ELSE null END  ) as "OUT",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 11 THEN e.siglasecretaria ELSE null END  ) as "NOV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 12 THEN e.siglasecretaria ELSE null END  ) as "DEZ"
FROM
solicitacao AS s
JOIN 
encaminhamento e ON e.codsolicitacao = s.codsolicitacao
WHERE
year( s.dataencerram ) = 2010
AND 
tipo = 'Sugestão'
GROUP BY
e.siglasecretaria WITH ROLLUP

E retornou isso:

 

Imagem Postada

 

 

Gostaria de substitui o NULL (do total) pela palavra Total, é possível fazer isso?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ficaria assim

 

SELECT 
IFNULL(e.siglasecretaria,"Total") AS secretaria,
COUNT(CASE WHEN MONTH( s.dataencerram ) = 1 THEN e.siglasecretaria ELSE null END  ) as "JAN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 2 THEN e.siglasecretaria ELSE null END  ) as "FEV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 3 THEN e.siglasecretaria ELSE null END  ) as "MAR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 4 THEN e.siglasecretaria ELSE null END  ) as "ABR",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 5 THEN e.siglasecretaria ELSE null END  ) as "MAI",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 6 THEN e.siglasecretaria ELSE null END  ) as "JUN",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 7 THEN e.siglasecretaria ELSE null END  ) as "JUL",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 8 THEN e.siglasecretaria ELSE null END  ) as "AGO",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 9 THEN e.siglasecretaria ELSE null END  ) as "SET",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 10 THEN e.siglasecretaria ELSE null END  ) as "OUT",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 11 THEN e.siglasecretaria ELSE null END  ) as "NOV",
COUNT(CASE WHEN MONTH( s.dataencerram ) = 12 THEN e.siglasecretaria ELSE null END  ) as "DEZ"
FROM
solicitacao AS s
JOIN 
encaminhamento e ON e.codsolicitacao = s.codsolicitacao
WHERE
year( s.dataencerram ) = 2010
AND 
tipo = 'Sugestão'
GROUP BY
e.siglasecretaria 
WITH ROLLUP

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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