select dentro de outro chamando procedure
Pessoal como fazer este select?
A coluna REPROVADO esta com TRUE ou FALSE como faço para contar os alunos que estão com TRUE e os que estão com FALSE, segue abaixo o código:
A coluna REPROVADO esta com TRUE ou FALSE como faço para contar os alunos que estão com TRUE e os que estão com FALSE, segue abaixo o código:
select codigo_turma,
matricula_aluno,
mediaglobalanual,
mediaglobalfinal,
reprovado
from proc_reprovados(:cod_escola, :turma)
Osmar
Curtidas 0
Respostas
Marisiana Battistella
04/03/2014
Bom dia Osmar!
Testei o código a segui com utilizando o nome de uma tabela nas clausulas from que fazer a chamada do proc_reprovados e funcionou,
não sei vai funcionar com o procedimento, talvez precise se alterações...
Testei o código a segui com utilizando o nome de uma tabela nas clausulas from que fazer a chamada do proc_reprovados e funcionou,
não sei vai funcionar com o procedimento, talvez precise se alterações...
select rep.reprovados,
ap.aprovados
from (select COUNT(reprovado) as reprovados
from proc_reprovados(:cod_escola, :turma)
where reprovado = 'FALSE') rep,
(select COUNT(reprovado) as aprovados
from proc_reprovados(:cod_escola, :turma)
where reprovado = 'TRUE') ap
group by rep.reprovados,
ap.aprovadosGOSTEI 0
Osmar
04/03/2014
Bom dia Marisiana,
Não funciona, já que preciso executar primeiro a Proc_Reprovado:
para depois executar a outra parte do código calculando o total de aprovados e reprovados da coluna REPROVADO:
Não funciona, já que preciso executar primeiro a Proc_Reprovado:
BEGIN
FOR
Select
ALUNOTURMA.codigo_turma,
aluno.nome,
ALUNOTURMA.matricula_aluno,
ALUNOTURMA.numero,
ALUNOTURMA.escola,
ALUNOTURMA.transferido,
ALUNOTURMA.desistente,
alunoturma.falecido,
alunoturma.abandono
from ALUNOTURMA left join aluno on alunoturma.matricula_aluno = aluno.matricula
where ALUNOTURMA.ESCOLA = :COD_ESCOLA
and ALUNOTURMA.codigo_turma=:turma
order by aluno.nome
INTO :CODIGO_TURMA,
:NOME_ALUNO,
:MATRICULA_ALUNO,
:NUMERO,
:ESCOLA,
:TRANSFERIDO,
:desistente,
:falecido,
:abandono
DO
BEGIN
SELECT mediaglobalanual, mediaglobalfinal
FROM proc_media_anual(:MATRICULA_ALUNO,:CODIGO_TURMA)
into :MEDIAGLOBALANUAL , :mediaglobalfinal;
if ((mediaglobalanual < 50) and (mediaglobalfinal < 50)) then
reprovado = 'True';
else
reprovado = 'False';
SUSPEND;
END
END
para depois executar a outra parte do código calculando o total de aprovados e reprovados da coluna REPROVADO:
select codigo_turma,
matricula_aluno,
mediaglobalanual,
mediaglobalfinal,
reprovado
from proc_reprovados(:cod_escola, :turma)
GOSTEI 0
Marisiana Battistella
04/03/2014
Quando você executa esse select, vc consegue obter o retorno do procedimento?
select codigo_turma,
matricula_aluno,
mediaglobalanual,
mediaglobalfinal,
reprovado
from proc_reprovados(:cod_escola, :turma) GOSTEI 0
Marisiana Battistella
04/03/2014
Se retorna valores, você pode tenta executar assim pra ver se dá certo:
select rep.reprovado,
ap.aprovado
from (select COUNT(r.reprovado) as reprovado
from (select codigo_turma,
matricula_aluno,
mediaglobalanual,
mediaglobalfinal,
reprovado
from proc_reprovados(:cod_escola, :turma)) r
where r.reprovado = 'FALSE') rep,
(select COUNT(a.reprovado) as aprovado
from (select codigo_turma,
matricula_aluno,
mediaglobalanual,
mediaglobalfinal,
reprovado
from proc_reprovados(:cod_escola, :turma)) a
where a.reprovado = 'TRUE') ap
group by rep.reprovado,
ap.aprovado
GOSTEI 0
Osmar
04/03/2014
Poxa funcionou, mim desculpe pela falta de experiência, só que quando fui colocar no formulário não ficou como eu preciso, então alterei a proc_reprovado para mim retornar por Escola e ANO, veja como ficou:
então quando executo essa procedure ela mim retorna assim:
então preciso que a o Select que você fez mim retorne assim:
BEGIN
FOR
Select
ALUNOTURMA.codigo_turma,
ALUNOTURMA.matricula_aluno,
ALUNOTURMA.escola,
ALUNOTURMA.transferido,
ALUNOTURMA.desistente,
alunoturma.falecido,
alunoturma.abandono
from ALUNOTURMA left join TURMA on alunoturma.codigo_turma = TURMA.codigo
where ALUNOTURMA.ESCOLA = :COD_ESCOLA
and TURMA.ano = :ANO
INTO :CODIGO_TURMA,
:MATRICULA_ALUNO,
:ESCOLA,
:TRANSFERIDO,
:desistente,
:falecido,
:abandono
DO
BEGIN
SELECT mediaglobalanual, mediaglobalfinal
FROM proc_media_anual(:MATRICULA_ALUNO,:CODIGO_TURMA)
into :MEDIAGLOBALANUAL , :mediaglobalfinal;
if ((mediaglobalanual < 50) and (mediaglobalfinal < 50)) then
reprovado = 'True';
else
reprovado = 'False';
SUSPEND;
END
END
então quando executo essa procedure ela mim retorna assim:
CODIGO_TURMA REPROVADO
3 True
3 False
3 True
7 False
7 True
9 False
9 True
então preciso que a o Select que você fez mim retorne assim:
CODIGO_TURMA QTD_APROVADOS QTD_REPROVADOS
3 1 2
7 1 1
9 1 1
GOSTEI 0
Marisiana Battistella
04/03/2014
Imagina, estamos aqui para aprender!
Tenta assim pra ver se dá certo:
Tenta assim pra ver se dá certo:
select at.codigo_turma,
rep.reprovado,
ap.aprovado
from aluno_turma at
left join (select r.codigo_turma,
COUNT(r.reprovado) as reprovado
from (select codigo_turma,
matricula_aluno,
mediaglobalanual,
mediaglobalfinal,
reprovado
from proc_reprovados(:cod_escola, :turma)) r
where r.reprovado = 'FALSE'
group by r.codigo_turma) rep
on rep.codigo_turma = at.codigo_turma
left join (select ap.codigo_turma,
COUNT(a.reprovado) as aprovado
from (select codigo_turma,
matricula_aluno,
mediaglobalanual,
mediaglobalfinal,
reprovado
from proc_reprovados(:cod_escola, :turma)) a
where a.reprovado = 'TRUE'
group by ap.codigo_turma) ap
on ap.codigo_turma = at.codigo_turma
group by at.codigo_turma,
rep.reprovado,
ap.aprovado
GOSTEI 0
Osmar
04/03/2014
Boa tarde, tive que formatar minha máquina, olha esta parando na primeira linha em at, mas um amigo acabou resolvendo para mim, veja como ficou o código:
Uso report builder, e estou com problema para posicionar corretamente no formulário, porque pego os dados de duas query a query acima pego por COD_ESCOLA e ANO e a segunda pego por ESCOLA, TURMA e ANO, então não se é possível fazer tudo em uma query só, porque resolveria o problema ou talvez exista uma forma de ajustar no próprio formulário, coisa que já fiz várias vezes e não deu certo, aí vai a segunda query:
O modelo do formulário deveria ser assim:
Nº ORDEM SÉRIE TRANSFERIDO % TRANSFERIDO QTD_APROV QTD_REP
1 1º ANO 2 2% 20 5
2 2º ANO 0 0 30 3
3 3º ANO 3 5% 45 6
select
codigo_turma,
count(case when reprovado = 'False' then 1 end) as QtdAprovados,
count(case when reprovado = 'Ttrue' then 1 end) as QtdReprovados
from proc_reprovados(:cod_escola, :ano)
group by
codigo_turma
Uso report builder, e estou com problema para posicionar corretamente no formulário, porque pego os dados de duas query a query acima pego por COD_ESCOLA e ANO e a segunda pego por ESCOLA, TURMA e ANO, então não se é possível fazer tudo em uma query só, porque resolveria o problema ou talvez exista uma forma de ajustar no próprio formulário, coisa que já fiz várias vezes e não deu certo, aí vai a segunda query:
select t.ano,
t.grau,
count (al.matricula_aluno) as qtd_aluno,
(select
((select cast(count(al.matricula_aluno) as numeric(10,4)) as qtd_Transf
from alunoturma al inner join turma t on al.codigo_turma = t.codigo
where al.escola =:escola
and t.ano =:ano
and al.codigo_turma =:turma
and al.transferido ='True')
/ count(al.matricula_aluno) * 100) as Perc_Transf
from alunoturma al inner join turma t on al.codigo_turma = t.codigo
where al.escola =:escola
and al.codigo_turma =:turma),
(select count(al.transferido) as qtd_Transferido
from alunoturma al inner join turma t on al.codigo_turma = t.codigo
where al.escola =:escola
and t.ano =:ano
and al.codigo_turma =:turma
and al.transferido ='True')
from alunoturma al inner join turma t on al.codigo_turma = t.codigo
where al.escola =:escola
and t.ano =:ano
and al.codigo_turma =:turma
group by t.ano,
t.grau
order by grau
O modelo do formulário deveria ser assim:
Nº ORDEM SÉRIE TRANSFERIDO % TRANSFERIDO QTD_APROV QTD_REP
1 1º ANO 2 2% 20 5
2 2º ANO 0 0 30 3
3 3º ANO 3 5% 45 6
procedure TFrmRel_Indices.IBQryTurmaAfterScroll(DataSet: TDataSet);
begin
IBQryAlunoTurma.Close;
IBQryAlunoTurma.ParamByName('escola').AsString := IBQryTurmaESCOLA.AsString;
IBQryAlunoTurma.ParamByName('turma').AsString := IBQryTurmaCODIGO.AsString;
IBQryAlunoTurma.Open;
end;
GOSTEI 0
Osmar
04/03/2014
Marisiana, bom dia, obrigado por tudo já consegui resolver.
GOSTEI 0
Nelson Santos
04/03/2014
Desenvolva softwares 3D em Delphi 7
www.3dsistemas.com.br
www.3dsistemas.com.br
GOSTEI 0
Marisiana Battistella
04/03/2014
Marisiana, bom dia, obrigado por tudo já consegui resolver.
Por nada! Que bom que conseguiu! =)
GOSTEI 0