Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fabioemilio

Consulta com if com alguns critérios

Recommended Posts

Prezados,

 

Sou novato no fórum e já estou contando com a ajuda de vocês para solucionar uma dificuldade na consulta do mysql

 

Possuo uma tabela com a visão view_proc_1, que possui varios "alunos" com suas disciplinas e notas, e um campo denominado de status, no qual já contem a indicação de APR-Parcial e/ou REP-Parcial

 

Desejo fazer nova consulta que retorne o nome dos alunos (agrupados) e coloque um novo campo situaçao a com expressão REP, somente para o aluno que estiver com o status APR-Parcial em todas as disciplinas ou senão coloque REP no caso do aluno obter REP-Parcial em pelo menos uma das disciplina

 

No banco de dados cada aluno possuem 7 disciplinas (matemática,historia,geografia, português,etc...)

 

Estou tentando resolver a situação com o query abaixo, mas ele somente permite mudar a situação de apenas uma disciplina, a consulta não faz a alteração de todas as disciplinas quando solicitado.
select ano,serie,turma,categoria,nome_aluno,if (status="APR-Parcial","APR","REP") AS situacao
from bd_processual.view_proc_1
group by serie,turma,nome_aluno

order by nome_aluno

 

Att,

 

Fábio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta,

 

Você pode me passar mais detalhes como essa query pode de construída, a partir dos dados dessa consulta

 

select ano,serie,turma,categoria,nome_aluno,if (status="APR-Parcial","APR","REP") AS situacao

from bd_processual.view_proc_1
group by serie,turma,nome_aluno

order by nome_aluno

 

a minha dúvida caso opte pelo case é saber como farei para armazenar a informação de cada aluno num unico campo "situação" da tabela, esse dado dever ser REP ou APR para cada aluno quando for verificado a condição REP-Parcial ou REP-Parcial.

 

Att,

 

Fábio

Compartilhar este post


Link para o post
Compartilhar em outros sites

(Case when status='APR-Parcial' then 'APR'

When status= 'xxxxxxxxx' then 'REP'

Else 'Out' end) situacao,

 

Troque o "if" pelo "case"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Motta, bom dia!

 

Eu inseri a query como você descreve e retorna o seguinte erro:

 

Description: unknown column 'status' in field lista

 

trata-se de uma visão identificada como: view_proc_1, com os campos (ano, serie, turma,nome_aluno, nome_disciplina, nota_1, status) - situação seria um campo novo gerado pela consulta para armazenar o APR ou REP

 

 

select (Case when status='APR-Parcial' then 'APR'
When status= 'REP-Parcial' then 'REP'
Else 'OUT' end) situacao
O que será que está acontecendo?
Abraço,
Fábio Emílio

Compartilhar este post


Link para o post
Compartilhar em outros sites


select ano,serie,turma,categoria,nome_aluno,(Case when status='APR-Parcial' then 'APR'

When status= 'REP-Parcial' then 'REP'

Else 'OUT' end) situacao

from bd_processual.view_proc_1

group by serie,turma,nome_alunoorder by nome_aluno

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

A consulta rodou sem erros, mas sabe o que acabei de verificar, Quando mudo o status de uma disciplina para REP-Parcial, a consulta não retorna a alteração de REP, isso porque o select não lê todos os registros que um unico aluno possui, vou explicar melhor:

 

cada aluno possui 7 disciplinas, cada uma delas recebe o status de APR-Parcial ou REP-parcial, a depender do valor do nota_1, o que a query deve retornar é o nome do aluno (agrupado) que tenha obtido o status de APR-parcial em todas as disciplinas, caso o aluno esteja com pelo menos um status REP-Parcial, ele recebe o status de REP.

 

a consulta montada por você, modifica o status de apenas uma disciplina, os demais status dos alunos quando alterado não é retornado pela query.

 

A sua ajuda está sendo muito importante para que eu consiga resolver um problema que talvez altere o funcionamento de um aplicativo que roda no Access.

 

Att,

 

Fábio

Compartilhar este post


Link para o post
Compartilhar em outros sites

a consulta montada por você, modifica o status de apenas uma disciplina, os demais status dos alunos quando alterado não é retornado pela query.

 

Desculpe mas não montei nenhuma consulta, apenas sugeri a troca do comando IF pelo CASE.

 

Se existem mais relacionamentos a query deverá ser refeita.

 

Sugiro abrir outro tópico explicado o problema e publicando as tabelas e seus relacionamentos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

você me deu uma boa dica de como utilizar case, a partir daí pensei em modicar para a seguinte estrutura:

é possível colocar vários case numa uma select? você pode me ajudar a montar essa query?

 

select ano,serie,turma,categoria,nome_aluno,
(Case when nome_disciplina="portugues" and status='APR-Parcial' then '1'
When status= 'REP-Parcial' then '0'
Else 'OUT' end) MAT_1
(Case when nome_disciplina="matematica" and status='APR-Parcial' then '1'
When status= 'REP-Parcial' then '0'
Else 'OUT' end) MAT_2
(Case when nome_disciplina="historia" and status='APR-Parcial' then '1'
When status= 'REP-Parcial' then '0'
Else 'OUT' end) MAT_3
from bd_processual.view_proc_1
group by serie,turma,nome_aluno

order by nome_aluno

Compartilhar este post


Link para o post
Compartilhar em outros sites

é possível colocar vários case numa uma select?

 

 

 

Sim, qual a dúvida para montar o sql ? Vc sabe usar joins em sql ? Leu algum tutorial sobre isto ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ANO;SERIE;TURMA;NOME_ALUNO;NOME_DISCIPLINA;NOTA_1;STATUS

2012;7;BERTRANO;HISTORIA;7,5;APR-PARCIAL

2012;7;CICRANO;HISTORIA;5,5;REP-PARCIAL

...CONTINUA TABELA

 

 

//Divulgando o CSV Comp,tento resolver de modo diferente o mesmo problema,não sendo para uso no Mysql

//criar uma tabela para resultados
{
  tabela_resultados;
  @tabela;
   0;0;0;0;
    query=0;
    destino=0
}
//retorna todos os aprovados em todas as materias
{
   tabela_alunos;
   @algo;
   (APR-PARCIAL);//busca todas as ocorrencias de APR-parcial
   0;0;0;
   query=0;
   destino=0
}
//cria uma nova tabela com resultados
{
   tabela_resultados;
    @datamemo;
    (tabela_alunos.que);
     0;0;0;
     query=0;
    destino=0
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

 

Eu sei usar joins, mas neste caso específico, eu preciso utilizar a estrutura do case para buscar 7 ocorrências diferentes e armazena-las na mesma tabela em campos diferentes, eu poderia usar esse exemplo para armazenar mais disciplinas?

 

 

(Case when nome_disciplina="portugues" and status='APR-Parcial' then '1'
When status= 'REP-Parcial' then '0'
Else 'OUT' end) MAT_1
Atenciosamente,
Fábio

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.