none
Resultado vindo com somatoria total em todos os campos RRS feed

  • Discussão Geral

  • Boa tarde galera, será que alguem poderia me ajudar nesta consulta minha, ela está certa: quando eu pego curso por curso ela me trás o valor certo, porém quando coloco pra trazer todos ou mais de um curso, o certo é trazer valores diferentes porém a consulta está somando tudo.

    --select * from GLINKSREL where mastertable='umatricpl' 
    
    select distinct 
    	c.nome,
    	(select 
    		COUNT(m.MATALUNO)
    	from UMATRICPL as m (nolock) 
    	inner join UCURSOS as c (nolock)
    		on
    			c.CODCUR = m.CODCUR 
    	where 
    		m.STATUS = 'ma' and 
    		m.PERLETIVO = '1-2016' and 
    		--m.codcur in ('5') and
    		m.mataluno not in
    			(select 
    				a.mataluno 
    			from 
    				UMATALUN as a(nolock)
    			where
    				a.CODCUR = c.CODCUR and
    				a.PERLETIVO='1-2016' and
    				a.STATUS='dp') and 
    		m.mataluno not in
    					(select 
    						mataluno 
    					from 
    						UMATALUN as a(nolock)
    					where
    						a.CODCUR = c.CODCUR and
    						a.PERLETIVO='1-2016' and
    						a.STATUS='ad')) as MATRICULADOS,
    /*=======================================*/
    	(select 
    		COUNT(m.MATALUNO)
    	from UMATRICPL as m (nolock) 
    	inner join UCURSOS as c (nolock)
    		on
    			c.CODCUR = m.CODCUR
    	where 
    		m.STATUS = 'ma' and 
    		m.PERLETIVO = '1-2016' and 
    		--m.codcur in ('5') and
    		m.mataluno in
    			(select	
    				a.mataluno 
    			from 
    				UMATALUN as a(nolock)
    			where
    				a.CODCUR = c.CODCUR and
    				a.PERLETIVO='1-2016' and
    				a.STATUS='dp') and
    		m.mataluno in
    					(select 
    						a.mataluno 
    					from 
    						UMATALUN as a(nolock)
    					where
    						a.CODCUR = c.CODCUR and
    						a.PERLETIVO='1-2016' and
    						a.STATUS='ma')) as MATRICULADOS_CURSANDO_DEPENDENCIA,
    /*=======================================*/
    	(select  
    		COUNT(m.MATALUNO)
    	from UMATRICPL as m (nolock) 
    	inner join UCURSOS as c (nolock)
    		on
    			c.CODCUR = m.CODCUR
    	where 
    		m.STATUS = 'ma' and 
    		m.PERLETIVO = '1-2016' and 
    		--m.codcur in ('5') and
    		m.mataluno not in
    			(select 
    				a.mataluno 
    			from 
    				UMATALUN as a(nolock)
    			where
    				a.CODCUR = c.CODCUR and
    				a.STATUS = 'ma')) as MATRICULADOS_SOMENTE_DP_ou_AP
    			
    from ucursos as c (nolock)
    inner join umatricpl as m 
    	on 
    		m.codcur=c.codcur
    where
    	m.perletivo='1-2016' 
    	and m.codcur in ('1','3','5','6','7','8','10','11','12','13','14')
    group by
    	c.nome
    order by
    	1
    	
    	
    
    


    CharlesTI.

    • Tipo Alterado Marcos SJ quarta-feira, 13 de abril de 2016 19:50 How to
    quarta-feira, 13 de abril de 2016 19:28

Todas as Respostas

  • Charles.ptu,

    Primeiro sugiro você remover e tentar evitar a utilização de sub-consultas na cláusula de SELECT.

    Após isto revise a sua cláusula de agrupamento (GROUP BY) para ver se a agregação está correta.

    Espero ter ajudado.


    Felipe Lauffer
    MCSA: SQL Server | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]



    • Editado FLauffer quarta-feira, 13 de abril de 2016 20:34
    quarta-feira, 13 de abril de 2016 20:33
  • Boa tarde Flauffer,

    já tentei de tudo quanto é forma, tirei e alterei este group by e sem exito. A respeito da sub-consultas, tinha aplicado o exists e tbm not exist, porém ficou pior ainda, demorava muito pra me trazer o resultado, e esta consulta quando peguei para remodelar era muito pior, pq tinha muita sub-consulta, mas muita mesmo!


    CharlesTI.

    quarta-feira, 13 de abril de 2016 20:44
  • Charles,

    O problema esta relacionado a performance?

    Mesmo com esta lentidão os dados estão sendo resultados corretamente?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 14 de abril de 2016 13:42
  • Bom dia Junior,

    então, que nem estava falando antes a lentidão se dava por causa dos comandos "Exists" e "Not Exists" q utilizava na consulta, e como nosso banco de dados é muito grande implicava na lentidão, depois que retirei os comandos citados a cima a consulta ficou um pouco mais rápida. Testei cada curso da instituição, todos os resultados batiam com um planilha q eu já tinha, inclusive olhei um por um, meu problema é que minha consulta não trás estes resultados por cada curso, como vc pode ver no print, esta trazendo o resultados totais em todos os cursos repetitivamente. 


    CharlesTI.

    quinta-feira, 14 de abril de 2016 14:03
  • Charles,

    Então, mas isso não esta acontecendo devido a maneira que você esta agrupando os dados?


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 14 de abril de 2016 15:11
  • Charles, se você quer valores quebrando por curso, deve acrescentá-lo a sua cláusula group by.

    select distinct 
    	c.nome, m.codcur

    group by
    	c.nome, m.codcur
    order by
    	1

    Att,


    Antero Marques

    ______________________________________________________________________

    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta.

    O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.



    quinta-feira, 14 de abril de 2016 15:47
  • já testei e não deu certo Antero. Tirando, alterando, mesma coisa

    CharlesTI.

    quinta-feira, 14 de abril de 2016 17:28
  • Charles,

    Você consegue enviar um print com exemplos dos dados de cada uma das tabelas abaixo para análise?

    UMATRICPL 
    UCURSOS
    UMATALUN 


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    quinta-feira, 14 de abril de 2016 17:34
  • Claro q sim Kanaãm,


    CharlesTI.

    quinta-feira, 14 de abril de 2016 17:56
  • Cara, se eu entendi direito deve ser algo mais ou menos assim:

    SELECT C.NOME, SUM(CASE WHEN A.MATALUNO IS NULL THEN 0 ELSE 1 END) AS MATRICULADOS, SUM(CASE WHEN A.STATUS='dp' THEN 1 ELSE 0 END) AS MATRICULADOS_CURSANDO_DEPENDENCIA, SUM(CASE WHEN A.STATUS='ma' THEN 1 ELSE 0 END) AS MATRICULADOS_SOMENTE_DP_ou_AP FROM UCURSOS C (NOLOCK) INNER JOIN UMATRICPL M ON M.CODCUR = C.CODCUR LEFT JOIN UMATALUN A ON C.CODCUR = A.CODCUR AND M.MATALUNO = A.MATALUNO AND M.PERLETIVO = A.PERLETIVO WHERE M.PERLETIVO = '1-2016' AND M.CODCUR IN ('1','3','5','6','7','8','10','11','12','13','14')

    GROUP BY C.NOME,A.MATALUNO, A.STATUS


    Não cheguei a testar, mas veja ai se funciona.


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    quinta-feira, 14 de abril de 2016 19:39