Array
(
)

Dúvida - Função ´SUM´

Jbb
   - 28 set 2004

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;

Marcus.magalhaes
   - 28 set 2004

Boa tarde.

Segue abaixo uma dica do q vc pode fazer:

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)
COMPUTE SUM(COUNT(DISTINCT UMATRICPL.MATALUNO))
Att,

Jbb
   - 28 set 2004

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

Jbb
   - 28 set 2004


Citação:
=´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))

Marcus.magalhaes
   - 28 set 2004

Use a mesma estrutura :

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

Att,

Jbb
   - 20 out 2004

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.

Marcus.magalhaes
   - 21 out 2004

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,