Dica Query

1 resposta
F

Olá Pessoal!
Preciso gerar uma consulta no formato abaixo:

1. Professor          Semestre Atual   Semestre Anterior                Diferenca  
   2. -----------          -----------------    --------------------    -----------  
   3.   
   4.   Prof A                   10:00                  08:00                02: 00+  
   5.   Prof B                   07:00                  11:00                04: 00-

A tabela principal é ALOCACAO, conforme abaixo:

1. CREATE TABLE `alocacao` (  
   2.   `alc_id` int(11) NOT NULL auto_increment,  
   3.   `alc_semestre` int(11) default NULL,  
   4.   `alc_curso` int(11) default NULL,  
   5.   `alc_professor` int(11) default NULL,  
   6.   `alc_atividade` int(11) default NULL,  
   7.   `alc_qtdHoras` double default NULL,  
   8.   PRIMARY KEY  (`alc_id`)  
   9. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Fiz a seguinte query:

Select pfr_nome, Sum(alc_qtdHoras) as Sem_Ant, 
   (select sum(b.alc_qtdHoras) from alocacao as b
           where b.alc_professor  = alocacao.alc_professor 
           and   b.alc_semestre = 2)  as Sem_Atual
   from alocacao Left Join professor On professor.pfr_id = alocacao.alc_professor  
                 Left Join semestre  On semestre.smt_id  = alocacao.alc_semestre  
 Where alc_semestre >= 1    
 And   alc_semestre <= 2
 Group By pfr_nome, smt_descricao  
 Order By  pfr_nome, smt_descricao

E o resultado foi:

pfr_nome	                 Sem_Ant	Sem_Atual
Ane Mari Cagneti da Maia        15              2
Ane Mari Cagneti da Maia        2                2
Cloves Wodtke 	                    1                1
Gabriele da Maia                    12               16
Gabriele da Maia                    16               16

Vejam que o último registro não deveria aparecer, pois são as horas do Semestre_Atual, já computado na linha anterior.
Os registros da tabela:

pfr_nome	            smt_descricao	Sum(alc_qtdHoras)
Ane Mari Cagneti da Maia 	2007/1 	15
Ane Mari Cagneti da Maia 	2007/2 	2
Cloves Wodtke 	                   2007/2 	1
Gabriele da Maia                    2007/1 	12
Gabriele da Maia 	           2007/2 	16

Há como sumarizar as horas de dois semestres em uma única linha separando por semestre, como segue abaixo?

pfr_nome	                 Sem_Ant	Sem_Atual
Ane Mari Cagneti da Maia        15              0
Ane Mari Cagneti da Maia        2                0
Cloves Wodtke 	                    1                0
Gabriele da Maia                    12               16

Grato.

1 Resposta

F

Resolvi o relatório com a query abaixo…

Select Distinct A.pfr_nome,
       COALESCE((Select Sum(C.alc_qtdHoras) from alocacao C Where C.alc_professor = A.pfr_id and C.alc_Semestre = 2),0) As Sem_Atual,
       COALESCE((Select Sum(C.alc_qtdHoras) from alocacao C Where C.alc_professor = A.pfr_id and C.alc_Semestre = 1),0) As Sem_Ant,

      (COALESCE((Select Sum(C.alc_qtdHoras) from alocacao C Where C.alc_professor = A.pfr_id and C.alc_Semestre = 2),0) 
        -
       COALESCE((Select Sum(C.alc_qtdHoras) from alocacao C Where C.alc_professor = A.pfr_id and C.alc_Semestre = 1),0)) As Total

  From Professor A Left Join Alocacao B On A.pfr_id       = B.alc_professor
                   Left Join Semestre D On B.alc_semestre = D.smt_id
Group By A.pfr_nome, D.smt_descricao
Order By A.pfr_nome, D.smt_descricao
Criado 23 de novembro de 2007
Ultima resposta 27 de nov. de 2007
Respostas 1
Participantes 1