[firebase-br] Dúvida sobre Select

Anderson infosag em terra.com.br
Sex Ago 8 21:22:06 -03 2008


amigo acho que é usar o distinct e fazer um select agrupador:


select sum(id_aluno), id_veiculo
from (
select distinct(id_aluno),  id_veiculo
from tabela )
group by id_veiculo



acho que é isso !

abracos


----- Original Message ----- 
From: "Carlos Andrade" <krlosgilson em gmail.com>
To: <lista em firebase.com.br>
Sent: Friday, August 08, 2008 8:23 PM
Subject: Re: [firebase-br] Dúvida sobre Select


> Então galera, estou tentando executar esta procedure de dentro da minha
> aplicação, mas também de dentro do Firebird está gerando esta exception.
> Estou precisando o contador não conte a quantidade de aulas que existe na
> tabela e sim se existe aulas de 20 alunos do veículo que irei informar e o
> intevalo de datas.

tipo assim:

ID_ALUNO    ID_VEICULO    DATA

4                      1                        08-01-2008
4                      1                        08-02-2008
4                      1                        08-03-2008
7                      1                        08-01-2008
7                      1                        08-02-2008
8                      1                        08-03-2008
8                      1                        08-03-2008

Então, no resultado acima está me mostrando a quantidade total de aulas que
foi marcada para o veículo tal no período tal. Só que não é disso que estou
precisando, e sim que a procedure agrupe e retorne apenas 3. Por que nesse
resultado ai só foram marcadas as aulas para 3 alunos. É que o sistema do
Detran precisa bloquear aulas para o mesmo veículo quando esse mesmo veículo
completar aulas de 20 alunos no mês, sendo que não interessa a quantidade de
aulas. Acho que agora deu para entender melhor.... Obrigado pela
disponibilidade de todos!


(Samuel Ferreira) escreveu:

ola

olha, nao tem como dar 'multiple rows' no count.

como vc ta chamando a procedure?

(Felipe Oriani) escreveu:

Olá Carlos, tente executar esta sql diretamente no FireBird ou no SQL Editor
do IBExpert (caso vc o utilize)...
Não sei se é interessante, mas neste caso, acho que você poderia executar
diretamente no software este tipo de sql..

(Carlos Andrade) escreveu:

Boa Noite! Tenho uma tabela que armazena as aulas práticas dos alunos de um
sistema para Auto-Escolas. Estou precisando dar um select que me retorne 1
(para true) ou 0 (para false) se já foram marcadas as aulas de 20 alunos
diferentes em um determinado período de datas. Tentei as seguintes
procedures:

CREATE PROCEDURE SP_LIMITE_AULAS_VEIC(
    VEICULO INTEGER,
    DATA_INI DATE,
    DATA_FIM DATE)
RETURNS (
    YES_NO SMALLINT)
AS
declare variable qtde integer;
begin
  /* Verifica se já foram marcadas as 20 aulas do veículo no mês */
  select count(*) from AULAS_PRATICAS
  where ID_VEICULO =:veiculo and DATA BETWEEN :data_ini and :data_fim
  into : qtde;
  if (qtde > 19) then yes_no = 1; else yes_no = 0;
  suspend;
end

(  NESSE EXEMPLO ACIMA ESTÁ ME RETORNANDO VÁRIAS LINHAS GERANDO UM
EXCEPTION, MULTIPLE ROWS..... )

CREATE PROCEDURE SP_LIMITE_AULAS_VEIC(
    VEICULO INTEGER,
    DATA_INI DATE,
    DATA_FIM DATE)
RETURNS (
    YES_NO SMALLINT)
AS
declare variable qtde integer;
begin
  /* Verifica se já foram marcadas as 20 aulas do veículo no mês */
  select count(*) from AULAS_PRATICAS
  where ID_VEICULO =:veiculo and DATA BETWEEN :data_ini and :data_fim
  group by ID_ALUNO
  into : qtde;
  if (qtde > 19) then yes_no = 1; else yes_no = 0;
  suspend;
end

(  NESSE EXEMPLO ACIMA NÃO GERA NENHUMA EXCEPTION, MAS ESTÁ MOSTRANDO O
RESULTADO NÃO ESPERADO, POIS O RESULTADO ESTÁ MOSTRANDO A QUANTIDADE DE
AULAS DE TODOS OS ALUNOS.

Então, o que estou querendo é a quantidade de alunos no período informado
que foram marcados no veículo especificado.

Acho que deu para entender!!!


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use: 
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista