CrazyLOL 2 Denunciar post Postado Fevereiro 13, 2014 Galera, to com uma bronca aqui que acredito que seja simples. Bom tenho uma tabela que fica salvo resumos de livros que foram enviados ( as pessoas digitam um resumo do livro e envia ) na tabela eu tenho 2 colunas que são data_envio que é o dia que foi feito o envio do resumo, e a coluna mes_referencia que é para qual mes aquele resumo foi enviado. O que eu preciso agora, gerar um relatorio de todos os usuarios que enviaram resumo, comparando se a Data de envio é o mesmo que o mes referencia, se a condição for verdadeira o usuario ganha uma estrela se não ele ganha uma bolinha vermelha. Dessa maneira eu montei este select: select a.`USUARIO`, (IF((MONTH(a.`DATA_ENVIO`) = 1 and a.`MES_REFERENCIA` = 1),1,0)) AS 'JAN', (IF((MONTH(a.`DATA_ENVIO`) = 2 and a.`MES_REFERENCIA` = 2),1,0)) AS 'FEV', (IF((MONTH(a.`DATA_ENVIO`) = 3 and a.`MES_REFERENCIA` = 3),1,0)) AS 'MAR' from rh_resumos a group by a.`USUARIO` Qual o erro? na tabela eu tenho 2 valores salvos sendo eles 1 resumo enviado no mes de Janeiro e um para Fevereiro, ambos resumos foram enviados no período certo, Porém quando eu executo este select ele traz apenas este resultado: USUARIO | JAN | FEV | MAR Teste | 0 | 1 | 0 O Correto seria: USUARIO | JAN | FEV | MAR Teste | 1 | 1 | 0 O que fiz de errado? Compartilhar este post Link para o post Compartilhar em outros sites
Roberto Fagundes 40 Denunciar post Postado Fevereiro 13, 2014 Tira o group by pra ver o que acontece, no meu ver o correto seria: USUARIO | JAN | FEV | MAR Teste | 0 | 1 | 0 Teste | 1 | 0 | 0 Se você tirar o group by creio eu que retornaria desta forma acima e outra coisa seu if você pode deixar menor desta forma: select a.`USUARIO`, (IF((MONTH(a.`DATA_ENVIO`) = a.`MES_REFERENCIA`),1,0)) AS 'JAN', (IF((MONTH(a.`DATA_ENVIO`) = a.`MES_REFERENCIA`),1,0)) AS 'FEV', (IF((MONTH(a.`DATA_ENVIO`) = a.`MES_REFERENCIA`),1,0)) AS 'MAR' from rh_resumos a; ai seu select ficaria da forma que está acima... Compartilhar este post Link para o post Compartilhar em outros sites
CrazyLOL 2 Denunciar post Postado Fevereiro 13, 2014 Então Roberto este trecho que citie: Data de envio é o mesmo que o mes referencia, Coloquei de forma errada no caso eu preciso verificar se o mes da data_envio é 1 (janeiro) e se o mês_referencia é 1 também dessa maneira eu posso classificar ele 1 = estrela (enviou o resumo no periodo certo que é Janeiro) e 0 = (bolinha vermelha não enviou o resumo no periodo certo ou não enviou o resumo). Tirando o Group By realmente funciona porém preciso usar o Group By porquue é muitos colaboradores e preciso criar o rank com estrelas e bolinhas vermelhas para quem enviou ou não os resumos. Pelo que percebi ele só está pegando o ultimo valor da consulta quando utilizo o group by e não todos os valores que a tabela possui.. :( Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 13, 2014 Veja se ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
CrazyLOL 2 Denunciar post Postado Fevereiro 13, 2014 Motta nesse caso ele vai somar correto? No meu problema eu não posso somar porque eu já defini no PHP que caso o "JAN" for 1 o cara foi estrela, ele enviou o resumo na data certo e se caso for 0 ele não enviou e fica com bolinha vermelha. Se eu somar pode ter caso que o cara enviou 2 resumos no mes dessa maneira vai ficar JAN = 2 Eu fiz um outro teste aqui agora na primeira linha para ver se estava entra no bloco "se não" do if alterei o valor que está em destaque abaixo para 2 e o resultado foi assim. (IF((MONTH(a.`DATA_ENVIO`) = 1 AND a.`MES_REFERENCIA` = 1),1,2)) AS 'JAN', Usuario | JAN | FEV | MAR Teste | 2 | 1 | 0 Ele de certa forma entrou na condição porém retornou que não existe dados para o mes, mas existe sim o dado para o mes. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Fevereiro 13, 2014 algo assim ... select a.`USUARIO`, sum( (case when (MONTH(a.`DATA_ENVIO`) = 1 AND a.`MES_REFERENCIA` = 1) then 1 else 0 end) "jan" ... group by a.`USUARIO ` Compartilhar este post Link para o post Compartilhar em outros sites
paulojuchem 20 Denunciar post Postado Fevereiro 13, 2014 SELECT a.`USUARIO`, (IF((SELECT MONTH(b.`DATA_ENVIO`) FROM rh_resumos b WHERE b.usuario=a.usuario AND MONTH(b.`DATA_ENVIO`)=1 AND b.MES_REFERENCIA=1) IS NOT NULL,1,0)) AS 'JAN', (IF((SELECT MONTH(b.`DATA_ENVIO`) FROM rh_resumos b WHERE b.usuario=a.usuario AND MONTH(b.`DATA_ENVIO`)=2 AND b.MES_REFERENCIA=2) IS NOT NULL,1,0)) AS 'FEV', (IF((SELECT MONTH(b.`DATA_ENVIO`) FROM rh_resumos b WHERE b.usuario=a.usuario AND MONTH(b.`DATA_ENVIO`)=3 AND b.MES_REFERENCIA=3) IS NOT NULL,1,0)) AS 'MAR' FROM rh_resumos a GROUP BY a.`USUARIO` eu nao testei os parenteses pq n tenho as tuas tabelas pelo que entendi, o problema da query anterior é que a.data_envio e a.mes_referencia são varios resultados por causa do group by, dai eu o mysql deve interpretar o ultimo, por isso janeiro veio como false Compartilhar este post Link para o post Compartilhar em outros sites