none
Consulta para trazer somente alunos com dependência. RRS feed

  • Pergunta

  • Boa tarde pessoa,

    estou desenvolvendo uma consulta onde me traga os alunos que estão  matriculados no primeiro semestre letivo de 2016 (1-2016) com status de Matriculados no semestre (MA) e com as disciplinas de status do tipo dependência (DP) ou Adaptativo (AD), e é justamente no status de disciplina q está me atrapalhando. Como um aluno tem 'N' disciplina em um mesmo período letivo, algumas trás status 'DP' e 'AD' porém minha consulta trás também as de status 'MA', como mostrado na imagem abaixo, gostaria de saber um jeito de eu filtras essas diciplinas com status MA e somente, somente mesmo me trazer as que estão com status 'AD' ou 'DP'.

    select distinct 
    	umatricpl.status,
    	umatricpl.MATALUNO 
    from 
    	UMATRICPL, UCURSOS 
    where 
    	UMATRICPL.CODCUR=UCURSOS.CODCUR 
    	and umatricpl.STATUS='ma' 
    	and umatricpl.PERLETIVO='1-2016' 
    	and umatricpl.codcur in ('8') 
    	and umatricpl.MATALUNO in (
    					select 
    						UMATALUN.mataluno 
    					from 
    						UMATALUN 
    					where
    						UMATALUN.STATUS not in ('ma')
    						and UMATALUN.codcur in ('8')
    						and UMATALUN.PERLETIVO='1-2016')


    CharlesTI.

    segunda-feira, 11 de abril de 2016 20:23

Respostas

  • Experimente fazer uns testes com a query abaixo:

    select  
    	m.status,
    	m.MATALUNO
    from UMATRICPL as m 
    inner join UCURSOS as c
    	on
    		c.CODCUR = m.CODCUR 
    where 
    	m.STATUS = 'ma' and 
    	m.PERLETIVO = '1-2016' and 
    	m.codcur = '8' and 
    	not exists
    		(select 1 from UMATALUN as a
    		 where
    			a.CODCUR = m.CODCUR and
    			a.PERLETIVO = m.PERLETIVO and
    			a.MATALUNO = m.MATALUNO and
    			a.STATUS = 'ma')
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta CHARLES.PTU terça-feira, 12 de abril de 2016 13:49
    terça-feira, 12 de abril de 2016 13:03

Todas as Respostas

  • Boa tarde,

    Não sei se entendi corretamente a sua questão, mas experimente fazer uns testes mais ou menos dessa forma:

    select  
    	m.status,
    	m.MATALUNO,
    	a.CODDISCIPLINA,
    	a.DISCIPLINA,
    	a.STATUS 
    from UMATRICPL as m 
    inner join UCURSOS as c
    	on
    		c.CODCUR = m.CODCUR 
    inner join UMATALUN as a
    	on
    		a.CODCUR = m.CODCUR and
    		a.PERLETIVO = m.PERLETIVO and
    		a.MATALUNO = m.MATALUNO
    where 
    	m.STATUS = 'ma' and 
    	m.PERLETIVO = '1-2016' and 
    	m.codcur = '8' and 
    	a.STATUS <> 'ma'
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 11 de abril de 2016 20:49
  • Bom dia Gapimex,

    testei sua constulta e mesmo assim me trás matriculas em disciplinas com status 'MA'


    CharlesTI.

    terça-feira, 12 de abril de 2016 10:49
  • Charles, seu exemplo pra mim foi meio confuso. Mas veja se é isso:

    SELECT DISTINCT
      umatricpl.STATUS,
      umatricpl.MATALUNO
    FROM
      umatricpl
      /* Não sei porque você precisa da UCURSOS nesse select */
      /* já que nenhum campo dela aparece nem no retorno e nem */
      /* no filtro. Mas se precisar, aqui está no JOIN */
      LEFT OUTER JOIN ucursos ON umatricpl.codcur = ucursos.codcur
      LEFT OUTER JOIN umatalun ON umatricpl.mataluno = umatalun.mataluno
    WHERE
      /* não entendi porque você colocou diferente, já que na sua pergunta */
      /* o aluno tem que estar matriculado, e pelo que parece essa é a */
      /* tabela de alunos certo? */
      umatalun.STATUS = 'ma' AND
      umatricpl.PERLETIVO = '1-2016' AND
      /* Não precisa ser IN () com apenas 1 item */
      umatricpl.codcur = '8' AND
      /* Aqui eu colocaria o <> de MA. Pelo que entendi da sua pergunta */
      /* e exemplo, essa é a tabela que tem o status DP ou AD; logo ela */
      /* que seria filtrada. */
      umatricpl.STATUS <> 'ma'

    terça-feira, 12 de abril de 2016 11:33
  • Bom dia Sammuel,

    isso é uma das varias maneiras que fiz de tentar solucionar o problema. O meu problema é simples, basta olhar esse print acima e olhar na tabela de baixo, vc percebe q o aluno tem 5 disciplina, e somente uma esta com situação de dependência. O que quero é trazer alunos que tenha somente disciplinas com dependência. Este exemplo de cima esta errado a consulta pq o mesmo me trás valores com dependência e também com status matriculado.


    CharlesTI.

    terça-feira, 12 de abril de 2016 12:03
  • Bom dia,

    Charles, você pode postar o resultado obtido com a query que sugeri?


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 12 de abril de 2016 12:18
  • Gapimex o resultado me trouxe os códigos das disciplinas q estão com status AD ou DP, porém eu queria somente os alunos que realmente tivessem um semestre letivo que só pagassem dependência ou adaptação. No caso seria o semestre todo e não disciplinas cortadas. A sua consulta me trouxe somente as disciplinas, porém quero como sendo fonte o semestre.

    CharlesTI.


    • Editado CHARLES.PTU terça-feira, 12 de abril de 2016 12:37
    terça-feira, 12 de abril de 2016 12:36
  • Bom dia Charles.PTU

    Deixa eu te falar eu não conheço o seu banco, mas como vc postou o print e o select, vou te passar uma sugestão que talvez seja por isso que não esta trazendo o seus dados, na causa where tenta passar o paramento igual esta no seu banco.
    Exemplo:

    umatricpl.STATUS !='MATRICULADO' 

    nesse caso vc vai pegar todos que são diferente de matriculado.

    Abraço

     
    terça-feira, 12 de abril de 2016 13:03
  • Experimente fazer uns testes com a query abaixo:

    select  
    	m.status,
    	m.MATALUNO
    from UMATRICPL as m 
    inner join UCURSOS as c
    	on
    		c.CODCUR = m.CODCUR 
    where 
    	m.STATUS = 'ma' and 
    	m.PERLETIVO = '1-2016' and 
    	m.codcur = '8' and 
    	not exists
    		(select 1 from UMATALUN as a
    		 where
    			a.CODCUR = m.CODCUR and
    			a.PERLETIVO = m.PERLETIVO and
    			a.MATALUNO = m.MATALUNO and
    			a.STATUS = 'ma')
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta CHARLES.PTU terça-feira, 12 de abril de 2016 13:49
    terça-feira, 12 de abril de 2016 13:03
  • Gapimex vc poderia por gentileza, me explicar o porque do "select 1" depois do not exists!?

    CharlesTI.

    terça-feira, 12 de abril de 2016 13:10
  • O valor em si retornado pela query dentro do Exists é indiferente, o que importa é se a query retorna alguma linha ou não, por isso é comum utilizar-se o 1.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 12 de abril de 2016 13:47
  • Muito obrigado Gapimex, resolveu mais uma vez meu problema!

    CharlesTI.

    terça-feira, 12 de abril de 2016 13:49