Array
(
)

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

Italo Pereira
|
MVP
    24 nov 2014

Veja meu comando SQL:
#Códigoselect
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ódigowhere pedido > 0
sendo que não tenho uma coluna pedido, ela é criada. e já tentei usar assim:
#Códigowhere ((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
|
MVP
    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
|
MVP
    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...