Array
(
)

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

Italo Pereira
   - 24 nov 2014

Veja meu comando SQL:
#Código

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:
#Código
where pedido > 0

sendo que não tenho uma coluna pedido, ela é criada. e já tentei usar assim:
#Código
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?

William (devwilliam)
   - 24 nov 2014

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!

Italo Pereira
   - 24 nov 2014

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.

William (devwilliam)
   - 24 nov 2014

Tente assim, só trocando where:

#Código

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!

Italo Pereira
   - 24 nov 2014

funcionou amigo.

muito obrigado pela ajuda.

vou aproveitar e estudar mais sobre o comando HAVING.

valewww.

Marisiana
   - 29 dez 2014

Você pode fazer assim também:
#Código

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