Inquiridor
Resultado vindo com somatoria total em todos os campos

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
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
-
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.
-
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]
-
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.
-
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]
-
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.
- Editado Antero Marques quinta-feira, 14 de abril de 2016 15:48
-
-
-
-
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