FabriBh 0 Denunciar post Postado Abril 6, 2011 Olá tarde a todos... Preciso gerar um relatório, porém neste relatório irei reunir dados de diferentes tabelas do banco de dados(MySql), para ser mais especifico, duas tabelas, já possuo as query´s funcionando perfeitamente! Na tabelaA, recebo da minha query uma lista de cidades e um numero de armadilhas ativas que cada cidade possui. Na tabelaB, recebo da minha query uma lista de cidades que tiveram armadilhas vistoriadas e a soma das vistorias, lembrando que pode faltar cidade nessa lista, se ela não tiver nenhuma vistoria na data especifica. Sendo assim, com base nessas informações, preciso realizar a média de execução por cidade. As query´s que possuo, eu tenho que fazer um trabalho manual, gerar duas tabelas e depois calcular a media de execução de vistorias na mão. Caso alguém possa me ajudar. Abs. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 6, 2011 Não sei se entendi bem mas tente montar duas tabela virtuais com as queries que tem hoje SELECT * FROM (SELECT CIDADE,ARMADILHAS FROM TABELA1) VIRTUAL1 (SELECT CIDADE,SUM(VISTORIAS) VISTORIAS FROM TABELA2) WHERE VIRTUAL1.CIDADE = VIRTUAL2.CIDADE A partir deste ponto é só montar o agrupamento requerido. Compartilhar este post Link para o post Compartilhar em outros sites
FabriBh 0 Denunciar post Postado Abril 7, 2011 Não sei se entendi bem mas tente montar duas tabela virtuais com as queries que tem hoje SELECT * FROM (SELECT CIDADE,ARMADILHAS FROM TABELA1) VIRTUAL1 (SELECT CIDADE,SUM(VISTORIAS) VISTORIAS FROM TABELA2) WHERE VIRTUAL1.CIDADE = VIRTUAL2.CIDADE A partir deste ponto é só montar o agrupamento requerido. Bom vou colocar aqui as query´s para que você entendam melhor, os nome das tabelas e dos campos são fictício, mas dá para ilustrar muito bem. //query que conta a quantidade de armadilhas cadastradas, onde situac = 1, representa as armadilhas ativas. SELECT C.CIDADE, COUNT(A.SITUAC) as TOTAL_DE_ARMADILHAS FROM TBA A INNER JOIN TBC C ON(A.COD = C.COD) WHERE C.TIPO = 'SESMG' AND A.SITUAC = 1 GROUP BY C.NOM_CLIENTE //query para contar quantas armadilhas foram vistoriadas SELECT C.CIDADE, COUNT(V.NUM_ARMAD) as VISTORIA FROM TBVIS V INNER JOIN TBCLI C ON(V.COD = C.COD) WHERE C.TIPO = 'SESMG' AND V.DT_VIS = '2011-04-06' GROUP BY C.NOM_CLIENTE Sendo assim, para cada query, eu necessito juntar dados de duas tabelas, onde o resultado da primeiro query será assim: Cidades Armadilhas AGUAS FORMOSAS 80 ARAGUARI 349 BOM DESPACHO 126 CONSELHEIRO LAFAIETE 266 CORONEL FABRICIANO 218 CURVELO 210 GOVERNADOR VALADARES 425 IPATINGA 512 ITABIRA 259 JANAUBA 171 JOAO MONLEVADE 217 LAVRAS 245 MALACACHETA 77 MANHUACU 115 PADRE PARAISO 81 PARACATU 192 PIRAPORA 199 PONTE NOVA 106 SETE LAGOAS 497 TEOFILO OTONI 265 VISCONDE DO RIO BRANCO 81 E o resultado da segunda query que conta quantas armadilhas foram vistoriadas, traz um resultado igual a esse, porém nem sempre aparece todas as cidades, porque as vezes naquele dia, não houve vistorias. Dá tenho que fazer a média, dividir o numero de vistorias, pelo numero de armadilhas para saber a % de armadilhas vistoriadas, queria montar uma query para realizar todo esse processo. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Abril 7, 2011 SELECT VIRTUAL2.CIDADE,AVG(VIRTUAL2.VISTORIA) FROM ( SELECT C.CIDADE, COUNT(A.SITUAC) as TOTAL_DE_ARMADILHAS FROM TBA A INNER JOIN TBC C ON(A.COD = C.COD) WHERE C.TIPO = 'SESMG' AND A.SITUAC = 1 GROUP BY C.NOM_CLIENTE ) VIRTUAL1, ( SELECT C.CIDADE, COUNT(V.NUM_ARMAD) as VISTORIA FROM TBVIS V INNER JOIN TBCLI C ON(V.COD = C.COD) WHERE C.TIPO = 'SESMG' AND V.DT_VIS = '2011-04-06' GROUP BY C.NOM_CLIENTE ) VIRTUAL2 WHERE VIRTUAL1.CIDADE = VIRTUAL2.CIDADE GROUP BY VIRTUAL2.CIDADE Creio ser isto, talvez falte algum refinamento. Compartilhar este post Link para o post Compartilhar em outros sites
FabriBh 0 Denunciar post Postado Abril 23, 2011 Valeu galera, mas já consegui resolver, fiz via programação mesmo, ficou mais fácil, nada como uma boa analise do problema para que se encontre a melhor solução, agradeço pela respostas dadas... Vlw. Compartilhar este post Link para o post Compartilhar em outros sites