Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img96.imageshack.us/img96/1963/consultamysql2.jpg&key=c4dbdcee3f022537cfe3627a77933eb714739d572cd64da134835bdef9f31924" alt="Imagem Postada" />
Gostaria de criar um relatório em PHP, que ficasse dessa maneira:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img576.imageshack.us/img576/1541/relatorio.jpg&key=0529b255d0a82d62d76044003ffacf8cd5e3c40685b15f4b5c817cd997305cbb" alt="Imagem Postada" />
Alguém poderia me dar uma ajuda?
Obrigado!
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
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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img824.imageshack.us/img824/2416/relatorio1.jpg&key=aa87d3dbb423171c7e8ab0ca13a9afdf651302a561840533dc9ded73cbfaf836" alt="Imagem Postada" />
O correto seria assim:
/applications/core/interface/imageproxy/imageproxy.php?img=http://img594.imageshack.us/img594/2511/relatorio2.jpg&key=9031f73371b5d9aa4819d5ef76ae83899a4be6e5d0d94d8fc63e29887c10e0b3" alt="Imagem Postada" />
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
/applications/core/interface/imageproxy/imageproxy.php?img=http://img197.imageshack.us/img197/4564/relatorio3c.jpg&key=e27dbdadc44015332283d8f861fb59e1f9c41f610ab30aee9bbf4fa55b421bbc" alt="Imagem Postada" />
Agora vou tentar exibir o resultado no PHP.
Será que é possível totalizar por mês?
>
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
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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://a.imageshack.us/img686/6546/relatorio4k.jpg&key=4e78bf33e4264fc003c70d537fe46631484acc8fee3bb5a9eb46d500f0e0f777" alt="Imagem Postada" />
Gostaria de substitui o NULL (do total) pela palavra Total, é possível fazer isso?
Obrigado!
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
Valeu goruks!
Muito obrigado pela ajuda!
Agora tá funcionando certinho.
Abraços
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