Dúvida - Função ´SUM´

28/09/2004

0

bom dia!


Tenho a seguinte consulta:

SELECT COUNT(DISTINCT UMATRICPL.MATALUNO) AS NºALUNOS,UMATRICPL.CODCUR,
UMATRICPL.CODPER,UPERIODOS.HABILITACAO,
TURNO = CASE
WHEN SUBSTRING(UMATRICPL.IDALUNO1,4,1) = ´N´ THEN ´NOTURNO´
WHEN SUBSTRING(UMATRICPL.IDALUNO1,4,1) = ´M´ THEN ´MATUTINO´
ELSE ´NULLO´
END
FROM UMATRICPL, UPERIODOS
WHERE UMATRICPL.PERLETIVO = ´2004´
AND STATUS =´1´
AND UMATRICPL.CODCUR = UPERIODOS.CODCUR
AND UMATRICPL.CODPER = UPERIODOS.CODPER
GROUP BY UMATRICPL.CODCUR,UMATRICPL.CODPER,UPERIODOS.HABILITACAO,
SUBSTRING(UMATRICPL.IDALUNO1,4,1)

Retorno da consulta no grid:

NºAlu CodCur CodPer Habilitacao Turno
9611DIREITOMATUTINO
52311DIREITONOTURNO

Gostaria de saber se tem como incluir uma variável ou mesmo a função ´SUM´ para q no final da linha do grid de dados seja totalizado o valor do NºAlu acompanhado da frase total como abaixo.

NºAlu CodCur CodPer Habilitacao Turno
9611DIREITOMATUTINO
52311DIREITONOTURNO
619 <- Total

Desde já grato pela atenção;


Responder

Posts

28/09/2004

Marcus.magalhaes

Boa tarde.

Segue abaixo uma dica do q vc pode fazer:

[color=green:797ce8db78]SELECT COUNT(DISTINCT UMATRICPL.MATALUNO) AS NºALUNOS,UMATRICPL.CODCUR,
UMATRICPL.CODPER,UPERIODOS.HABILITACAO,
TURNO = CASE
WHEN SUBSTRING(UMATRICPL.IDALUNO1,4,1) = ´N´ THEN ´NOTURNO´
WHEN SUBSTRING(UMATRICPL.IDALUNO1,4,1) = ´M´ THEN ´MATUTINO´
ELSE ´NULLO´
END
FROM UMATRICPL, UPERIODOS
WHERE UMATRICPL.PERLETIVO = ´2004´
AND STATUS =´1´
AND UMATRICPL.CODCUR = UPERIODOS.CODCUR
AND UMATRICPL.CODPER = UPERIODOS.CODPER
GROUP BY UMATRICPL.CODCUR,UMATRICPL.CODPER,UPERIODOS.HABILITACAO,
SUBSTRING(UMATRICPL.IDALUNO1,4,1) [/color:797ce8db78]
[color=red:797ce8db78]COMPUTE SUM(COUNT(DISTINCT UMATRICPL.MATALUNO))[/color:797ce8db78]
Att,


Responder

28/09/2004

Jbb

Caro Marcus;
Muito obrigado! :-)
e boa tarde!


Responder

28/09/2004

Jbb

[quote=´jbb´]Caro Marcus;
Muito obrigado! :-)
e boa tarde!




Marcus,

Estou ordenando a sentença pelo turno agora.
Como montar um COMPUTE SUM() que me retornaria
o total por turno ou seja seria o COMPUTE acompanhado de
da cláusula WHERE ?

AND UMATRICPL.CODPER = UPERIODOS.CODPER
GROUP BY UMATRICPL.CODCUR,UMATRICPL.CODPER,UPERIODOS.HABILITACAO,
SUBSTRING(UMATRICPL.IDALUNO1,4,1)

-----> ORDER BY SUBSTRING(UMATRICPL.IDALUNO1,4,1) <----

COMPUTE SUM(COUNT(DISTINCT UMATRICPL.MATALUNO))


Responder

28/09/2004

Marcus.magalhaes

Use a mesma estrutura :

Select xxx
From xxxx
Where xxx
Group by xxx
Having xxx
Order by xxx
Compute xxx [by column]

Att,


Responder

20/10/2004

Jbb

boa tarde Marcus!

A consulta seguinte:

SELECT UPERIODOS.HABILITACAO, COUNT(DISTINCT UMATRICPL.MATALUNO) AS NºALUNOS,
UMATRICPL.PERLETIVO,
UMATRICPL.CODCUR,
UMATRICPL.CODPER
FROM UMATRICPL, UPERIODOS
WHERE (UMATRICPL.PERLETIVO =´2004/1´ OR
UMATRICPL.PERLETIVO = ´2004/2´)
AND (UMATRICPL.STATUS =´1´
OR UMATRICPL.STATUS =´11´OR UMATRICPL.STATUS =´13´)
AND UMATRICPL.CODCUR = UPERIODOS.CODCUR
AND UMATRICPL.CODPER = UPERIODOS.CODPER
GROUP BY UMATRICPL.CODCUR,UMATRICPL.CODPER,UPERIODOS.HABILITACAO,
UMATRICPL.PERLETIVO
ORDER BY UMATRICPL.CODCUR,UMATRICPL.CODPER,UMATRICPL.PERLETIVO
COMPUTE SUM(COUNT(DISTINCT UMATRICPL.MATALUNO))BY UMATRICPL.CODCUR,UMATRICPL.CODPER

Retorna o total de alunos em cada período letivo por curso/
Total de alunos no curso.

NºAlu Cod Cur CodPer
600 1 1 2004/1
523 1 1 2004/2
1123 <- Total do curso

Estou com as seguintes dúvidas

Como trazer no lugar do Total de Alunos no curso a diferença entre os totais de alunos entre cada período letivo ?

NºAlu Cod Cur CodPer
600 1 1 2004/1
523 1 1 2004/2
077 <- Diferença


Tem como montar expressões(*100/88 + 50 - ´SUM´...etc) com o compute
de forma a retornar o valor da expressão que esta contido ?

desde já obrigado.


Responder

21/10/2004

Marcus.magalhaes

Bom dia.

Isso não é possível dentro do SQL (linguagem), pois o COMPUTE (BY) é usado para gerar subtotais e totais, médias, etc e não para efetuar operações matemáticas. Esse processo vc terá que fazer na sua aplicação.

Att,


Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar