Comando SELECT. Como usar campo criado na cláusula WHERE?
Veja meu comando SQL:
quero usar a seguinte linha:
sendo que não tenho uma coluna pedido, ela é criada. e já tentei usar assim:
porém, recebo um erro que diz, que não posso usar o comando agrupado em cláusula WHERE.
Alguém pode me ajudar?
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
Curtidas 0
Respostas
William
24/11/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!
GOSTEI 0
Italo Pereira
24/11/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.
Postei nos 4 bancos porque acho que o comando SQL é semelhante e sem muita diferença.
Abraço.
GOSTEI 0
William
24/11/2014
Tente assim, só trocando where:
Montei copiando os dados que você passou no primeiro post!
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!
GOSTEI 0
Italo Pereira
24/11/2014
funcionou amigo.
muito obrigado pela ajuda.
vou aproveitar e estudar mais sobre o comando HAVING.
valewww.
muito obrigado pela ajuda.
vou aproveitar e estudar mais sobre o comando HAVING.
valewww.
GOSTEI 0
Marisiana Battistella
24/11/2014
Você pode fazer assim também:
Testa as duas opções e veja qual executa com melhor performance...
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...
GOSTEI 0