# 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
/*=======================================*/
(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
/*=======================================*/
(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

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 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.

Felipe Lauffer
MCSA: SQL Server | MCP

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

• Editado 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?

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