Divisão entre valores atribuídos

29/01/2019

0

Boa noite amigos, tenho um select que soma vários ítens e aliases a eles.
Todas as somas estão corretas, mas não estou conseguindo fazer uma divisão direta de um aliase por outro, por exemplo, qtdereq dividido por qtdeconsulta.
Tentei de várias formas e em todas elas recebi erro na formação do SQL. A idéia era que no final fosse criado um aliase chamado proporcao, que seria fruto de (qtdereq\\qtdeconsulta)

Alguém pra dar uma luz?? Obrigado!

select a.nome nomemedico, COALESCE( ( select sum( ab.quantidade ) from cl_atendimentos ab inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle
inner join cl_thmservicos ad on ac.servico = ad.handle where ab.MEDICOREQUISITANTE = a.MEDICO and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59'
AND AC.GRUPO1 IN ( 48,17,43,4,5,9,22,16,11,39,28,27,18,29,2,45,7,41,35,47,6,10,31,34,8 ) AND AB.SITUACAO IN (10,71,21,5 ) and ( ( ac.grupo2 not in ( 29,4,19,30) ) ) ), 0 ) qtdereq,
COALESCE( ( select sum( ab.total ) from cl_atendimentos ab inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle inner join cl_thmservicos ad on ac.servico = ad.handle
where ab.MEDICOREQUISITANTE = a.MEDICO and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59' AND AC.GRUPO1 IN
( 48,17,43,4,5,9,22,16,11,39,28,27,18,29,2,45,7,41,35,47,6,10,31,34,8 )
AND AB.SITUACAO IN (10,71,21,5 ) and ( ( ac.grupo2 not in ( 29,4,19,30) ) ) ), 0.0) valoreq, COALESCE( ( select sum( ab.quantidade ) from cl_atendimentos ab
inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle
inner join cl_thmservicos ad on ac.servico = ad.handle where a.handle = ab.medico and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59'AND AB.SITUACAO IN (10,71,21,5 )
and ( ( ac.grupo2 in ( 29,4,19,30) ) ) ), 0) qtdeconsulta,
COALESCE( ( select sum( ab.total - ab.materiais ) from cl_atendimentos ab inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle inner join cl_thmservicos ad on ac.servico = ad.handle
where a.handle = ab.medico and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59'AND AB.SITUACAO IN (10,71,21,5 ) and ( ( ac.grupo2 in ( 29,4,19,30) ) ) ), 0) totalconsulta
from cl_recursos a
where tipo = 1 and a.handle in ( 14,190,230,9,177,136,10,115,13,245,164,98,195,203,11,275,51,179,239 ), order by a.nome
Diego

Diego

Responder

Post mais votado

29/01/2019

boa noite,

se a query está correta, uma solução simples seria fazer um select externo onde vc poderia usar os "alias" sem problema.... eu acredito que dentro do mesmo select vc não conseguirá isso....

Seria algo do tipo:

select t.nomemedico, t.qtdereq, t.qtdeconsulta, t.totalconsulta, (t.qtdereq / t.qtdeconsulta) resultado from (
select a.nome nomemedico, COALESCE( ( select sum( ab.quantidade ) from cl_atendimentos ab inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle inner join cl_thmservicos ad on ac.servico = ad.handle where ab.MEDICOREQUISITANTE = a.MEDICO and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59' AND AC.GRUPO1 IN ( 48,17,43,4,5,9,22,16,11,39,28,27,18,29,2,45,7,41,35,47,6,10,31,34,8 ) AND AB.SITUACAO IN (10,71,21,5 ) and ( ( ac.grupo2 not in ( 29,4,19,30) ) ) ), 0 ) qtdereq,
COALESCE( ( select sum( ab.total ) from cl_atendimentos ab inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle inner join cl_thmservicos ad on ac.servico = ad.handle
where ab.MEDICOREQUISITANTE = a.MEDICO and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59' AND AC.GRUPO1 IN
( 48,17,43,4,5,9,22,16,11,39,28,27,18,29,2,45,7,41,35,47,6,10,31,34,8 )
AND AB.SITUACAO IN (10,71,21,5 ) and ( ( ac.grupo2 not in ( 29,4,19,30) ) ) ), 0.0) valoreq, COALESCE( ( select sum( ab.quantidade ) from cl_atendimentos ab
inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle
inner join cl_thmservicos ad on ac.servico = ad.handle where a.handle = ab.medico and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59'AND AB.SITUACAO IN (10,71,21,5 )
and ( ( ac.grupo2 in ( 29,4,19,30) ) ) ), 0) qtdeconsulta,
COALESCE( ( select sum( ab.total - ab.materiais ) from cl_atendimentos ab inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle inner join cl_thmservicos ad on ac.servico = ad.handle
where a.handle = ab.medico and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59'AND AB.SITUACAO IN (10,71,21,5 ) and ( ( ac.grupo2 in ( 29,4,19,30) ) ) ), 0) totalconsulta
from cl_recursos a
where tipo = 1 and a.handle in ( 14,190,230,9,177,136,10,115,13,245,164,98,195,203,11,275,51,179,239 ), order by a.nome ) as t;

Ricardo Pestana

Ricardo Pestana
Responder

Mais Posts

30/01/2019

Diego

boa noite,

se a query está correta, uma solução simples seria fazer um select externo onde vc poderia usar os "alias" sem problema.... eu acredito que dentro do mesmo select vc não conseguirá isso....

Seria algo do tipo:

select t.nomemedico, t.qtdereq, t.qtdeconsulta, t.totalconsulta, (t.qtdereq / t.qtdeconsulta) resultado from (
select a.nome nomemedico, COALESCE( ( select sum( ab.quantidade ) from cl_atendimentos ab inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle inner join cl_thmservicos ad on ac.servico = ad.handle where ab.MEDICOREQUISITANTE = a.MEDICO and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59' AND AC.GRUPO1 IN ( 48,17,43,4,5,9,22,16,11,39,28,27,18,29,2,45,7,41,35,47,6,10,31,34,8 ) AND AB.SITUACAO IN (10,71,21,5 ) and ( ( ac.grupo2 not in ( 29,4,19,30) ) ) ), 0 ) qtdereq,
COALESCE( ( select sum( ab.total ) from cl_atendimentos ab inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle inner join cl_thmservicos ad on ac.servico = ad.handle
where ab.MEDICOREQUISITANTE = a.MEDICO and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59' AND AC.GRUPO1 IN
( 48,17,43,4,5,9,22,16,11,39,28,27,18,29,2,45,7,41,35,47,6,10,31,34,8 )
AND AB.SITUACAO IN (10,71,21,5 ) and ( ( ac.grupo2 not in ( 29,4,19,30) ) ) ), 0.0) valoreq, COALESCE( ( select sum( ab.quantidade ) from cl_atendimentos ab
inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle
inner join cl_thmservicos ad on ac.servico = ad.handle where a.handle = ab.medico and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59'AND AB.SITUACAO IN (10,71,21,5 )
and ( ( ac.grupo2 in ( 29,4,19,30) ) ) ), 0) qtdeconsulta,
COALESCE( ( select sum( ab.total - ab.materiais ) from cl_atendimentos ab inner join cl_convenioservicos ac on ab.servicoconvenio = ac.handle inner join cl_thmservicos ad on ac.servico = ad.handle
where a.handle = ab.medico and Ab.DATA >= '01.06.2018' AND Ab.DATA <= '30.06.2018 23:59:59'AND AB.SITUACAO IN (10,71,21,5 ) and ( ( ac.grupo2 in ( 29,4,19,30) ) ) ), 0) totalconsulta
from cl_recursos a
where tipo = 1 and a.handle in ( 14,190,230,9,177,136,10,115,13,245,164,98,195,203,11,275,51,179,239 ), order by a.nome ) as t;



Entendi. Realmente não havia tocado sobre o fato de não poder usas o alias dentro do mesmo select. A solução proposta de fazer o select "externo" funcionou 100%. MUITO obrigado pela dica Ricardo.
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