Divisão entre valores atribuídos
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
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
Curtidas 0
Melhor post
Ricardo Pestana
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;
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;
GOSTEI 1
Mais Respostas
Diego
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;
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.
GOSTEI 0