Comando SELECT. Como usar campo criado na cláusula WHERE?

24/11/2014

0

Veja meu comando SQL:

select
sum(entrega.quant) as quant,
medicacao.nome,
medicacao.quant,
((sum(entrega.quant) - medicacao.quant) * 1.1) as pedido
from
entrega, medicacao
where
medicacao.id = entrega.id_medicacao and
entrega.data <= current_date and
entrega.data >= current_date - 30
group by
medicacao.nome,
medicacao.quant


quero usar a seguinte linha:
where pedido > 0


sendo que não tenho uma coluna pedido, ela é criada. e já tentei usar assim:

where ((sum(entrega.quant) - medicacao.quant) * 1.1) > 0


porém, recebo um erro que diz, que não posso usar o comando agrupado em cláusula WHERE.

Alguém pode me ajudar?
Italo Pereira

Italo Pereira

Responder

Posts

24/11/2014

William

Como você postou em 4 sala de bancos de dados diferentes, vou somente deixar uma sugestão para utilizar o "HAVING" que serve para condicionar agrupamentos, mas veja como montar uma instrução da melhor maneira conforme o SGBD que você está usando!
Responder

24/11/2014

Italo Pereira

O banco é Firebird, pode me ensinar a usar o having?

Postei nos 4 bancos porque acho que o comando SQL é semelhante e sem muita diferença.

Abraço.
Responder

24/11/2014

William

Tente assim, só trocando where:

select
sum(entrega.quant) as quant,
medicacao.nome,
medicacao.quant,
((sum(entrega.quant) - medicacao.quant) * 1.1) as pedido
from
entrega, medicacao
where
medicacao.id = entrega.id_medicacao and
entrega.data <= current_date and
entrega.data >= current_date - 30
group by
medicacao.nome,
medicacao.quant
having ((sum(entrega.quant) - medicacao.quant) * 1.1) > 0


Montei copiando os dados que você passou no primeiro post!
Responder

24/11/2014

Italo Pereira

funcionou amigo.

muito obrigado pela ajuda.

vou aproveitar e estudar mais sobre o comando HAVING.

valewww.
Responder

29/12/2014

Marisiana Battistella

Você pode fazer assim também:
select result.quant,
     result.nome,
     result.quant_medicacao,
     result.pedido
from (select sum(entrega.quant) as quant,
               medicacao.nome,
               medicacao.quant as quant_medicacao,
              ((sum(entrega.quant) - medicacao.quant) * 1.1) as pedido
         from entrega
         join medicacao
         on medicacao.id = entrega.id_medicacao
         where entrega.data <= current_date
         and entrega.data >= current_date - 30
         group by medicacao.nome,
                 medicacao.quant ) result
where result.pedido > 0 


Testa as duas opções e veja qual executa com melhor performance...
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar