Percentual em codigo

Banco de Dados

02/09/2020

select Periodo_Inicio ,Periodo_FIM, count(cd_aviso_cirurgia) as quantidade from ( select distinct pac.cd_paciente,avi.cd_aviso_cirurgia, ate.cd_atendimento,pac.nm_paciente, sa.cd_sal_cir, sa.ds_sal_cir, ce.cd_cen_cir, ce.ds_cen_cir,
TO_CHAR(avi.dt_inicio_cirurgia,'HH24:MI:SS') Inicio,
Case When To_Number(To_Char(avi.dt_inicio_cirurgia,'hh24'))Between 0 And 19
Then 'Dia'
When To_Number(To_Char(avi.dt_inicio_cirurgia,'hh24'))Between 19 And 23
Then 'Noite'
/* When To_Number(To_Char(avi.dt_inicio_cirurgia,'hh24'))Between 0 And 6
Then 'Noite1' */
End Periodo_Inicio,
TO_CHAR(avi.dt_fim_cirurgia,'HH24:MI:SS') FIM,
Case When To_Number(To_Char(avi.dt_fim_cirurgia,'hh24'))Between 0 And 19
Then 'Dia'
When To_Number(To_Char(avi.dt_fim_cirurgia,'hh24'))Between 19 And 23
Then 'Noite'
/* When To_Number(To_Char(avi.dt_fim_cirurgia,'hh24'))Between 0 And 6
Then 'Noite' */
End Periodo_FIM


from dbamv.cen_cir ce
inner join dbamv.sal_cir sa on ce.cd_cen_cir = sa.cd_cen_cir
inner join dbamv.aviso_cirurgia avi on sa.cd_sal_cir = avi.cd_sal_cir
inner join dbamv.cirurgia_aviso ci on avi.cd_aviso_cirurgia = ci.cd_aviso_cirurgia
inner join dbamv.paciente pac on pac.cd_paciente = avi.cd_paciente
inner join dbamv.atendime ate on avi.cd_atendimento = ate.cd_atendimento
inner join dbamv.atendime ate on ate.cd_paciente = pac.cd_paciente
where avi.dt_inicio_cirurgia between '01/08/2020' and '31/08/2020' )
group by Periodo_Inicio,Periodo_FIM


como representar em forma percentual os periodos
Diogo Santos

Diogo Santos

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

02/09/2020

veja se isso funciona:
select
	Periodo_Inicio,
	Periodo_FIM,
	count(cd_aviso_cirurgia) as quantidade,
	( count(cd_aviso_cirurgia) / (sum(count(cd_aviso_cirurgia)) over()) ) * 100 partic
from
	(
		select
			pac.cd_paciente,
			avi.cd_aviso_cirurgia,
			ate.cd_atendimento,
			pac.nm_paciente,
			sa.cd_sal_cir,
			sa.ds_sal_cir,
			ce.cd_cen_cir,
			ce.ds_cen_cir,
			TO_CHAR(avi.dt_inicio_cirurgia,'HH24:MI:SS') Inicio,
			Case
				When To_Number(To_Char(avi.dt_inicio_cirurgia,'hh24')) Between 00 And 19 Then 'Dia'
				When To_Number(To_Char(avi.dt_inicio_cirurgia,'hh24')) Between 19 And 23 Then 'Noite'
/*				When To_Number(To_Char(avi.dt_inicio_cirurgia,'hh24')) Between 00 And 06 Then 'Noite1' */
			End Periodo_Inicio,
			TO_CHAR(avi.dt_fim_cirurgia,'HH24:MI:SS') FIM,
			Case
				When To_Number(To_Char(avi.dt_fim_cirurgia,'hh24')) Between 00 And 19 Then 'Dia'
				When To_Number(To_Char(avi.dt_fim_cirurgia,'hh24')) Between 19 And 23 Then 'Noite'
/*				When To_Number(To_Char(avi.dt_fim_cirurgia,'hh24')) Between 00 And 06 Then 'Noite' */
			End Periodo_FIM
		from
			dbamv.cen_cir ce
		inner join
			dbamv.sal_cir sa on ce.cd_cen_cir = sa.cd_cen_cir
		inner join
			dbamv.aviso_cirurgia avi on sa.cd_sal_cir = avi.cd_sal_cir
		inner join
			dbamv.cirurgia_aviso ci on avi.cd_aviso_cirurgia = ci.cd_aviso_cirurgia
		inner join
			dbamv.paciente pac on pac.cd_paciente = avi.cd_paciente
		inner join
			dbamv.atendime ate on avi.cd_atendimento = ate.cd_atendimento
		inner join
			dbamv.atendime ate on ate.cd_paciente = pac.cd_paciente
		where
			avi.dt_inicio_cirurgia between '01/08/2020' and '31/08/2020'
	)
group by
	Periodo_Inicio,
	Periodo_FIM
GOSTEI 0
Diogo Santos

Diogo Santos

02/09/2020

veja se isso funciona:
select
	Periodo_Inicio,
	Periodo_FIM,
	count(cd_aviso_cirurgia) as quantidade,
	( count(cd_aviso_cirurgia) / (sum(count(cd_aviso_cirurgia)) over()) ) * 100 partic
from
	(
		select
			pac.cd_paciente,
			avi.cd_aviso_cirurgia,
			ate.cd_atendimento,
			pac.nm_paciente,
			sa.cd_sal_cir,
			sa.ds_sal_cir,
			ce.cd_cen_cir,
			ce.ds_cen_cir,
			TO_CHAR(avi.dt_inicio_cirurgia,''HH24:MI:SS'') Inicio,
			Case
				When To_Number(To_Char(avi.dt_inicio_cirurgia,''hh24'')) Between 00 And 19 Then ''Dia''
				When To_Number(To_Char(avi.dt_inicio_cirurgia,''hh24'')) Between 19 And 23 Then ''Noite''
/*				When To_Number(To_Char(avi.dt_inicio_cirurgia,''hh24'')) Between 00 And 06 Then ''Noite1'' */
			End Periodo_Inicio,
			TO_CHAR(avi.dt_fim_cirurgia,''HH24:MI:SS'') FIM,
			Case
				When To_Number(To_Char(avi.dt_fim_cirurgia,''hh24'')) Between 00 And 19 Then ''Dia''
				When To_Number(To_Char(avi.dt_fim_cirurgia,''hh24'')) Between 19 And 23 Then ''Noite''
/*				When To_Number(To_Char(avi.dt_fim_cirurgia,''hh24'')) Between 00 And 06 Then ''Noite'' */
			End Periodo_FIM
		from
			dbamv.cen_cir ce
		inner join
			dbamv.sal_cir sa on ce.cd_cen_cir = sa.cd_cen_cir
		inner join
			dbamv.aviso_cirurgia avi on sa.cd_sal_cir = avi.cd_sal_cir
		inner join
			dbamv.cirurgia_aviso ci on avi.cd_aviso_cirurgia = ci.cd_aviso_cirurgia
		inner join
			dbamv.paciente pac on pac.cd_paciente = avi.cd_paciente
		inner join
			dbamv.atendime ate on avi.cd_atendimento = ate.cd_atendimento
		inner join
			dbamv.atendime ate on ate.cd_paciente = pac.cd_paciente
		where
			avi.dt_inicio_cirurgia between ''01/08/2020'' and ''31/08/2020''
	)
group by
	Periodo_Inicio,
	Periodo_FIM



ainda nao deu esta calculando errado ele aumento o numero de cirurgias
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

02/09/2020

e query é a mesma que você apresentou.
a única exceção é a linha
    ( count(cd_aviso_cirurgia) / (sum(count(cd_aviso_cirurgia)) over()) ) * 100 partic 
então não pode ter alterado qualquer conteúdo.
GOSTEI 0
Diogo Santos

Diogo Santos

02/09/2020

CONSEGUI USANDO UMA FUNÇÃO NATIVA DO ORACLE

select Periodo_Inicio ,Periodo_FIM,ROUND(RATIO_TO_REPORT(COUNT(*)) OVER()*100, 2) Percentual , count(cd_aviso_cirurgia) as quantidade from ( select distinct pac.cd_paciente,avi.cd_aviso_cirurgia, ate.cd_atendimento,pac.nm_paciente, sa.cd_sal_cir, sa.ds_sal_cir, ce.cd_cen_cir, ce.ds_cen_cir,
TO_CHAR(avi.dt_inicio_cirurgia,'HH24:MI:SS') Inicio,

Case When To_Number(To_Char(avi.dt_inicio_cirurgia,'hh24'))Between 0 And 19
Then 'Dia'
When To_Number(To_Char(avi.dt_inicio_cirurgia,'hh24'))Between 19 And 23
Then 'Noite'
/* When To_Number(To_Char(avi.dt_inicio_cirurgia,'hh24'))Between 0 And 6
Then 'Noite1' */
End Periodo_Inicio,
TO_CHAR(avi.dt_fim_cirurgia,'HH24:MI:SS') FIM,
Case When To_Number(To_Char(avi.dt_fim_cirurgia,'hh24'))Between 0 And 19
Then 'Dia'
When To_Number(To_Char(avi.dt_fim_cirurgia,'hh24'))Between 19 And 23
Then 'Noite'
/* When To_Number(To_Char(avi.dt_fim_cirurgia,'hh24'))Between 0 And 6
Then 'Noite' */
End Periodo_FIM


from dbamv.cen_cir ce
inner join dbamv.sal_cir sa on ce.cd_cen_cir = sa.cd_cen_cir
inner join dbamv.aviso_cirurgia avi on sa.cd_sal_cir = avi.cd_sal_cir
inner join dbamv.cirurgia_aviso ci on avi.cd_aviso_cirurgia = ci.cd_aviso_cirurgia
inner join dbamv.paciente pac on pac.cd_paciente = avi.cd_paciente
inner join dbamv.atendime ate on avi.cd_atendimento = ate.cd_atendimento
inner join dbamv.atendime ate on ate.cd_paciente = pac.cd_paciente
where avi.dt_inicio_cirurgia between '01/08/2020' and '31/08/2020' )
group by Periodo_Inicio,Periodo_FIM

RATIO_TO_REPORT
GOSTEI 0
POSTAR