[firebase-br] RES:  COUNT
    Ivan Guimarães Meirelles 
    igmeirelles em gmail.com
       
    Ter Jul 28 23:04:22 -03 2009
    
    
  
Opa... corrigindo.. tire a virgula antes de cada FROM depois da palavra
MEDIO... foi por engano...
Um abraço.
-----Mensagem original-----
De: Ivan Guimarães Meirelles [mailto:igmeirelles em gmail.com] 
Enviada em: terça-feira, 28 de julho de 2009 22:01
Para: 'FireBase'
Assunto: RES: [firebase-br] COUNT
Olá Jose...
Eu faria uma SP para isso... a complexidade está em transformar colunas em
linhas para fazer o q vc quer...
Mas aqui vai uma idéia um pouco tosca... mas acho q resolveria sem usar uma
SP... faça um teste...
select id_curso, id_periodo, 'R1',
sum(case r1 when 'R' then 1 else 0 end) ruim,
sum(case r1 when 'B' then 1 else 0 end) bom,
sum(case r1 when 'M' then 1 else 0 end) medio,
from tabela_gabarito group by 1, 2
union
select id_curso, id_periodo, 'R2',
sum(case r2 when 'R' then 1 else 0 end) ruim,
sum(case r2 when 'B' then 1 else 0 end) bom,
sum(case r2 when 'M' then 1 else 0 end) medio,
from tabela_gabarito group by 1, 2
union
select id_curso, id_periodo, 'R3',
sum(case r3 when 'R' then 1 else 0 end) ruim,
sum(case r3 when 'B' then 1 else 0 end) bom,
sum(case r3 when 'M' then 1 else 0 end) medio,
from tabela_gabarito group by 1, 2
union
select id_curso, id_periodo, 'R4',
sum(case r4 when 'R' then 1 else 0 end) ruim,
sum(case r4 when 'B' then 1 else 0 end) bom,
sum(case r4 when 'M' then 1 else 0 end) medio,
from tabela_gabarito group by 1, 2
Espero q ajude...
Um abraço.
-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Jose Luiz de Medeiros
Enviada em: terça-feira, 28 de julho de 2009 21:40
Para: lista em firebase. com. br
Assunto: [firebase-br] COUNT
Colegas, tenho um cadastro onde os alunos votaram sobre alguns cursos
ministrados, preciso então de imprimir o resultado.
 
Tabela de gabarito tenho:
 
ID_CURSO
ID_PERIODO
R1
R2
R3
R4
 
Os campos R1,R2,R3,R4 são os campos tipo char(1) que o aluno responde sobre
determinada pergunta: R(ruim)B(bom)M(médio).
Preciso num SQL agrupar essas resposta me dando o somatório de cada
resposta.
Tipo assim:
 
CURSO 1   PERIODO 5     BOM       MEDIO     RUIM
PERGUNTA1(R1)              100           30               40    
 PERGUNTA2(R2)             30             50                48
 PERGUNTA3(R3)             32             50                29
PERGUNTA4(R4)              49             10                28
 
Nesse exemplo funciona:
SELECT G.ID_CURSO,G.ID_PERIODO,COUNT(R1)as BOM
FROM gabarito G
WHERE
G.R1 = 'B'
GROUP by
G.ID_CURSO,G.ID_PERIODO
 
Funciona beleza
 
Mas como são muitas respostas diferentes nesse outro exemplo o resultado não
bate.
 
SELECT G.ID_CURSO,G.ID_PERIODO,
(SELECT COUNT(R1)FROM GABARITO WHERE R1 = 'B')AS BOM,
(SELECT COUNT(R1)FROM GABARITO WHERE R1 = 'R')AS RUIM,
(SELECT COUNT(R1)FROM GABARITO WHERE R1 = 'M')AS MEDIO,
(SELECT COUNT(R2)FROM GABARITO WHERE R2 = 'B')AS BOM,
(SELECT COUNT(R2)FROM GABARITO WHERE R2 = 'R')AS RUIM,
(SELECT COUNT(R2)FROM GABARITO WHERE R2 = 'M')AS MEDIO
FROM GABARITO G
GROUP by
G.ID_CURSO,G.ID_PERIODO 
 
Além de repetir o valor,a conta não bate.
 
O que estou fazendo de errado?
 
Grato:
Jose Luiz
 
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
    
    
Mais detalhes sobre a lista de discussão lista