Ajuda em Código SQL ORACLE

SQL

Banco de Dados

Oracle PL SQL

20/04/2020

((select sum(a.QT_HORA_REAL)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA C
where ds_etapa='225'
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia)*100)/(select decode(sum(r.qt_resultado),0,100,1,20,2,40,3,60,4,80,5,100)
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
) - (select sum(a.QT_HORA_PREV)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA c
where a.ds_etapa='225'
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia)

Preciso pegar o valor total disso, das etapas 163 a 225, já testei com a.ds_etapa between 163 and 225, acho que o decode n tá deixando somar direito, tirei ele e fiz com case, só que ai soma tudo errado
Leonardo Horning

Leonardo Horning

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

20/04/2020

vamos por partes:
aqui você tem o total de horas previstas e o total de horas realizadas de cada etapa entre '163' e '225' (alterei os alias das tabelas pra meu melhor entendimento: e-etapa, c-cronograma e p-projeto):
select
	e.ds_etapa,
	sum(e.QT_HORA_PREV) HPREV,
	sum(e.QT_HORA_REAL) HREAL
from
	PROJ_CRON_ETAPA e
INNER JOIN
	PROJ_CRONOGRAMA c ON c.nr_sequencia = e.nr_seq_cronograma
INNER JOIN
	PROJ_PROJETO p ON p.nr_sequencia = c.nr_seq_proj
where
	e.ds_etapa between '163' and '225'
	and p.nr_sequencia = :nr_sequencia
group by
	e.ds_etapa

agora duas perguntas:
- porque a utilização da tabela PROJ_PROJETO? ela aparentemente não serve pra nada na instrução acima. poderia ser:
select
	e.ds_etapa,
	sum(e.QT_HORA_PREV) HPREV,
	sum(e.QT_HORA_REAL) HREAL
from
	PROJ_CRON_ETAPA e
INNER JOIN
	PROJ_CRONOGRAMA c ON c.nr_sequencia = e.nr_seq_cronograma
where
	e.ds_etapa between '163' and '225'
	and c.nr_seq_proj = :nr_sequencia
group by
	e.ds_etapa

- também não entendi uma coisa na parte da divisão. você fez referência à ap.nr_sequencia, mas o que é "ap." ?
GOSTEI 0
Leonardo Horning

Leonardo Horning

20/04/2020

Na verdade eu to tentando somar 3 sub-selects nesse código, esse AP é de uma tabela med_avaliacao_paciente, eu esqueci de adicionar ela,



and b.nr_sequencia=:nr_sequencia)*100)/(select decode(sum(r.qt_resultado),0,100,1,20,2,40,3,60,4,80,5,100)
from med_avaliacao_result r


ela entra depois desse cara aqui.. , eu uso ela pra filtrar a pessoa fisíca depois

No Código eu preciso pegar o primeiro sub-select, multiplicar por 100, depois dividir pelo segundo sub-select, e depois subtrair pelo terceiro sub-select, e depois somar da etapa 163 á 225.
a tabela PROJ_projeto, é usada para filtrar o NR_sequencia no relatório.
Obrigado pela resposta!!

GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

você não pode publicar a instrução completa?
GOSTEI 0
Leonardo Horning

Leonardo Horning

20/04/2020

select ''Imunização'' A,
(select decode(r.qt_resultado,0,''Não'',''Sim'')
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
and r.nr_seq_item=960) B,
(select decode(r.qt_resultado,0,''Não'',''Sim'')
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
and r.nr_seq_item=958) C,
(select decode(r.qt_resultado,0,''Não'',''Sim'')
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
and r.nr_seq_item=957) D,
(select decode(r.qt_resultado,0,''Não'',''Sim'')
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
and r.nr_seq_item=959) E,
(select decode(r.qt_resultado,0,''Não'',''Sim'')
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
and r.nr_seq_item=961) F,
(select decode(sum(r.qt_resultado),0,0,1,20,2,40,3,60,4,80,5,100)
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
) G,
(select sum(a.QT_HORA_PREV)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA c
where a.ds_etapa =''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia) H,
(select sum(a.QT_HORA_REAL)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_Cronograma c
where a.ds_etapa =''214''
and c.nr_sequencia =a.nr_seq_cronograma
and c.nr_seq_proj =b.nr_sequencia
and b.nr_sequencia=:nr_sequencia) I,
(select decode(sum(r.qt_resultado),0,1,1,20,2,40,3,60,4,80,5,100)
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
) J,
((select sum(a.QT_HORA_REAL)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA C
where ds_etapa=''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia)*100)/(select decode(sum(r.qt_resultado),0,100,1,20,2,40,3,60,4,80,5,100)
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
) - (select sum(a.QT_HORA_PREV)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA c
where a.ds_etapa=''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia) K,
(select sum(a.QT_HORA_PREV)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA c
where a.ds_etapa=''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia)+((((select sum(QT_HORA_REAL)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA c
where a.ds_etapa=''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia)*100)/(select decode(sum(r.qt_resultado),0,100,1,20,2,40,3,60,4,80,5,100)
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
))-(select sum(a.QT_HORA_PREV)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA C
where a.ds_etapa=''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia)) L,
case when
(select sum(a.QT_HORA_PREV)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA C
where a.ds_etapa=''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj =b.nr_sequencia
and b.nr_sequencia=:nr_sequencia)+((((select sum(QT_HORA_REAL)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA C
where a.ds_etapa =''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia)*100)/(select decode(sum(r.qt_resultado),0,100,1,20,2,40,3,60,4,80,5,100)
from med_avaliacao_result r
where r.nr_seq_avaliacao=ap.nr_sequencia
))-(select sum(QT_HORA_PREV)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA C
where a.ds_etapa=''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia))>(select sum(QT_HORA_PREV)
from PROJ_CRON_ETAPA a,
PROJ_PROJETO b,
PROJ_CRONOGRAMA c
where a.ds_etapa=''214''
and c.nr_sequencia=a.nr_seq_cronograma
and c.nr_seq_proj=b.nr_sequencia
and b.nr_sequencia=:nr_sequencia)THEN ''Neg''
ELSE ''Pos''
END as M
from med_avaliacao_paciente ap
where (ap.cd_pessoa_fisica=:cd_pessoa_fisica or cd_pessoa_fisica=0)
and ap.nr_seq_tipo_avaliacao=214



esse é o código da etapa 214, tem um código para cada etapa, são todos iguais, só muda a ds.etapa e o nr_seq_item
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

opa!
então... essa query está muito 'verbosa', com muita repetição de comandos.
eu não tenho ORACLE instalado, então se der algum problema, vamos ajustando....
veja se esta alteração traz os valores corretos para a etapa 214:
select
	a.ds_etapa,
	c.nr_seq_proj,

	'Imunização' A,
	case when coalesce(apseq.qtB,0) = 0 then 'Não' else 'Sim' end B,
	case when coalesce(apseq.qtC,0) = 0 then 'Não' else 'Sim' end C,
	case when coalesce(apseq.qtD,0) = 0 then 'Não' else 'Sim' end D,
	case when coalesce(apseq.qtE,0) = 0 then 'Não' else 'Sim' end E,
	case when coalesce(apseq.qtF,0) = 0 then 'Não' else 'Sim' end F,

	decode(coalesce(apseq.totresultado,0),0,0,1,20,2,40,3,60,4,80,5,100) G,

	sum(a.QT_HORA_PREV) H,
	sum(a.QT_HORA_REAL) I,

	decode(coalesce(apseq.totresultado,0),0,1,1,20,2,40,3,60,4,80,5,100) J,

	(sum(a.QT_HORA_REAL)*100) /	coalesce(apseq.DivHr,100) -	sum(a.QT_HORA_PREV) K,

	sum(a.QT_HORA_PREV) + (((sum(a.QT_HORA_REAL)*100)/coalesce(apseq.DivHr,100))-sum(a.QT_HORA_PREV)) L,

	case when sum(a.QT_HORA_PREV)+(((sum(a.QT_HORA_REAL)*100)/coalesce(apseq.DivHr,100))-sum(a.QT_HORA_PREV)) > sum(a.QT_HORA_PREV)
		then 'Neg'
		else 'Pos'
	end M
from
	PROJ_CRON_ETAPA a
inner join
	PROJ_CRONOGRAMA c on c.nr_sequencia = a.nr_seq_cronograma
left join
	(select
		ap.nr_sequencia,
		ap.nr_seq_tipo_avaliacao,
		sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
		sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
		sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
		sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
		sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
		sum(r.qt_resultado) totresultado,
		decode(sum(r.qt_resultado),0,100,1,20,2,40,3,60,4,80,5,100) DivHr
	from
		med_avaliacao_paciente ap
	left join
		med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
	where
		(ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
		and ap.nr_seq_tipo_avaliacao = 214
	group by
		ap.nr_sequencia,
		ap.nr_seq_tipo_avaliacao
	) apseq on apseq.nr_sequencia = c.nr_seq_proj and apseq.nr_seq_tipo_avaliacao = a.ds_etapa
where
	a.ds_etapa = '214'
	and c.nr_seq_proj = :nr_sequencia
group by
	a.ds_etapa,
	c.nr_seq_proj


GOSTEI 0
Leonardo Horning

Leonardo Horning

20/04/2020

https://ibb.co/4Nv25K0


De uma olhada na imagem desse link, pra você entender melhor, então, cada módulo é uma banda, e cada banda, tem o código SQL, que é esse código enorme que eu mandei, o Cadastros Básicos é a etapa 163, Recepção é a etapa 164, Estoque é a etapa 165, e assim por diante..
Os dados estão puxando certinhos, a unica coisa que eu não to conseguindo fazer, é criar uma nova banda chamada de "Total", pra somar o campo "Tendência" de todos os módulos, quero que apareça a soma de todos eles embaixo, entendeu???

PS: o SQL da imunização, que tá ali emcima, é da etapa 214, todos os sqls de todas as etapas são idênticos, só muda o nome, o ds_etapa
o nr_seq_tipo_avaliacao e o nr_seq_item

Grato novamente pela força que tu tá dando!!!!
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

entendi o que você quis fazer. é que estou tentando fazer de uma forma que aquela única query dê o resultado geral do relatório; uma única query para gerar todas aquelas linhas.
GOSTEI 0
Leonardo Horning

Leonardo Horning

20/04/2020

Entendi, vamos fazer isso então, testei o seu código para a etapa 214, deu erro falando que não é uma expressão GROUP BY
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

tem como você passar os DDLs das tabelas envolvidas. não preciso dos dados, somente criar as tabelas.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

tente assim:
só troquei o decode por case porque uso SQLServer e nele a função decode não existe.
select
    a.ds_etapa,
    c.nr_seq_proj,
 
    'Imunização' A,
    case when coalesce(max(apseq.qtB),0) = 0 then 'Não' else 'Sim' end B,
    case when coalesce(max(apseq.qtC),0) = 0 then 'Não' else 'Sim' end C,
    case when coalesce(max(apseq.qtD),0) = 0 then 'Não' else 'Sim' end D,
    case when coalesce(max(apseq.qtE),0) = 0 then 'Não' else 'Sim' end E,
    case when coalesce(max(apseq.qtF),0) = 0 then 'Não' else 'Sim' end F,
 
    (case coalesce(max(apseq.totresultado),0)
		when 0 then 0
		when 1 then 20
		when 2 then 40
		when 3 then 60
		when 4 then 80
		when 5 then 100
	end) G,
 
    sum(a.QT_HORA_PREV) H,
    sum(a.QT_HORA_REAL) I,
 
    (case coalesce(max(apseq.totresultado),0)
		when 0 then 1
		when 1 then 20
		when 2 then 40
		when 3 then 60
		when 4 then 80
		when 5 then 100
	end) J,
 
    (sum(a.QT_HORA_REAL)*100) / coalesce(max(apseq.DivHr),100) - sum(a.QT_HORA_PREV) K,
 
    sum(a.QT_HORA_PREV) + (((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) L,
 
    case when sum(a.QT_HORA_PREV)+(((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) > sum(a.QT_HORA_PREV)
        then 'Neg'
        else 'Pos'
    end M
from
    PROJ_CRON_ETAPA a
inner join
    PROJ_CRONOGRAMA c on c.nr_sequencia = a.nr_seq_cronograma
left join
    (select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
			when 0 then 100
			when 1 then 20
			when 2 then 40
			when 3 then 60
			when 4 then 80
			when 5 then 100
		end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = 1 or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    ) apseq on apseq.nr_sequencia = c.nr_seq_proj and apseq.nr_seq_tipo_avaliacao = a.ds_etapa
where
    a.ds_etapa = '214'
    and c.nr_seq_proj = 5
group by
    a.ds_etapa,
    c.nr_seq_proj
GOSTEI 0
Leonardo Horning

Leonardo Horning

20/04/2020

tente assim:
só troquei o decode por case porque uso SQLServer e nele a função decode não existe.
select
    a.ds_etapa,
    c.nr_seq_proj,
 
    'Imunização' A,
    case when coalesce(max(apseq.qtB),0) = 0 then 'Não' else 'Sim' end B,
    case when coalesce(max(apseq.qtC),0) = 0 then 'Não' else 'Sim' end C,
    case when coalesce(max(apseq.qtD),0) = 0 then 'Não' else 'Sim' end D,
    case when coalesce(max(apseq.qtE),0) = 0 then 'Não' else 'Sim' end E,
    case when coalesce(max(apseq.qtF),0) = 0 then 'Não' else 'Sim' end F,
 
    (case coalesce(max(apseq.totresultado),0)
		when 0 then 0
		when 1 then 20
		when 2 then 40
		when 3 then 60
		when 4 then 80
		when 5 then 100
	end) G,
 
    sum(a.QT_HORA_PREV) H,
    sum(a.QT_HORA_REAL) I,
 
    (case coalesce(max(apseq.totresultado),0)
		when 0 then 1
		when 1 then 20
		when 2 then 40
		when 3 then 60
		when 4 then 80
		when 5 then 100
	end) J,
 
    (sum(a.QT_HORA_REAL)*100) / coalesce(max(apseq.DivHr),100) - sum(a.QT_HORA_PREV) K,
 
    sum(a.QT_HORA_PREV) + (((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) L,
 
    case when sum(a.QT_HORA_PREV)+(((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) > sum(a.QT_HORA_PREV)
        then 'Neg'
        else 'Pos'
    end M
from
    PROJ_CRON_ETAPA a
inner join
    PROJ_CRONOGRAMA c on c.nr_sequencia = a.nr_seq_cronograma
left join
    (select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
			when 0 then 100
			when 1 then 20
			when 2 then 40
			when 3 then 60
			when 4 then 80
			when 5 then 100
		end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = 1 or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    ) apseq on apseq.nr_sequencia = c.nr_seq_proj and apseq.nr_seq_tipo_avaliacao = a.ds_etapa
where
    a.ds_etapa = '214'
    and c.nr_seq_proj = 5
group by
    a.ds_etapa,
    c.nr_seq_proj


o Código tá funcionando certinho, porém não puxa nada de dados =(.
Como eu to de Home office, eu to sem acesso ao banco de dados do servidor pra te passar as DDLS, só consigo testar os códigos pelo sistema
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

nesse código que eu te passei eu retirei as referências à :cd_pessoa_fisica e :nr_sequencia. você corrigiu isso?
select
    a.ds_etapa,
    c.nr_seq_proj,
  
    'Imunização' A,
    case when coalesce(max(apseq.qtB),0) = 0 then 'Não' else 'Sim' end B,
    case when coalesce(max(apseq.qtC),0) = 0 then 'Não' else 'Sim' end C,
    case when coalesce(max(apseq.qtD),0) = 0 then 'Não' else 'Sim' end D,
    case when coalesce(max(apseq.qtE),0) = 0 then 'Não' else 'Sim' end E,
    case when coalesce(max(apseq.qtF),0) = 0 then 'Não' else 'Sim' end F,
  
    (case coalesce(max(apseq.totresultado),0)
        when 0 then 0
        when 1 then 20
        when 2 then 40
        when 3 then 60
        when 4 then 80
        when 5 then 100
    end) G,
  
    sum(a.QT_HORA_PREV) H,
    sum(a.QT_HORA_REAL) I,
  
    (case coalesce(max(apseq.totresultado),0)
        when 0 then 1
        when 1 then 20
        when 2 then 40
        when 3 then 60
        when 4 then 80
        when 5 then 100
    end) J,
  
    (sum(a.QT_HORA_REAL)*100) / coalesce(max(apseq.DivHr),100) - sum(a.QT_HORA_PREV) K,
  
    sum(a.QT_HORA_PREV) + (((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) L,
  
    case when sum(a.QT_HORA_PREV)+(((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) > sum(a.QT_HORA_PREV)
        then 'Neg'
        else 'Pos'
    end M
from
    PROJ_CRON_ETAPA a
inner join
    PROJ_CRONOGRAMA c on c.nr_sequencia = a.nr_seq_cronograma
left join
    (select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    ) apseq on apseq.nr_sequencia = c.nr_seq_proj and apseq.nr_seq_tipo_avaliacao = a.ds_etapa
where
    a.ds_etapa = '214'
    and c.nr_seq_proj = :nr_sequencia
group by
    a.ds_etapa,
    c.nr_seq_proj


GOSTEI 0
Leonardo Horning

Leonardo Horning

20/04/2020

nesse código que eu te passei eu retirei as referências à :cd_pessoa_fisica e :nr_sequencia. você corrigiu isso?
select
    a.ds_etapa,
    c.nr_seq_proj,
  
    'Imunização' A,
    case when coalesce(max(apseq.qtB),0) = 0 then 'Não' else 'Sim' end B,
    case when coalesce(max(apseq.qtC),0) = 0 then 'Não' else 'Sim' end C,
    case when coalesce(max(apseq.qtD),0) = 0 then 'Não' else 'Sim' end D,
    case when coalesce(max(apseq.qtE),0) = 0 then 'Não' else 'Sim' end E,
    case when coalesce(max(apseq.qtF),0) = 0 then 'Não' else 'Sim' end F,
  
    (case coalesce(max(apseq.totresultado),0)
        when 0 then 0
        when 1 then 20
        when 2 then 40
        when 3 then 60
        when 4 then 80
        when 5 then 100
    end) G,
  
    sum(a.QT_HORA_PREV) H,
    sum(a.QT_HORA_REAL) I,
  
    (case coalesce(max(apseq.totresultado),0)
        when 0 then 1
        when 1 then 20
        when 2 then 40
        when 3 then 60
        when 4 then 80
        when 5 then 100
    end) J,
  
    (sum(a.QT_HORA_REAL)*100) / coalesce(max(apseq.DivHr),100) - sum(a.QT_HORA_PREV) K,
  
    sum(a.QT_HORA_PREV) + (((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) L,
  
    case when sum(a.QT_HORA_PREV)+(((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) > sum(a.QT_HORA_PREV)
        then 'Neg'
        else 'Pos'
    end M
from
    PROJ_CRON_ETAPA a
inner join
    PROJ_CRONOGRAMA c on c.nr_sequencia = a.nr_seq_cronograma
left join
    (select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    ) apseq on apseq.nr_sequencia = c.nr_seq_proj and apseq.nr_seq_tipo_avaliacao = a.ds_etapa
where
    a.ds_etapa = '214'
    and c.nr_seq_proj = :nr_sequencia
group by
    a.ds_etapa,
    c.nr_seq_proj




As referências não estão nos Wheres ali???
GOSTEI 0
Leonardo Horning

Leonardo Horning

20/04/2020

nesse código que eu te passei eu retirei as referências à :cd_pessoa_fisica e :nr_sequencia. você corrigiu isso?
select
    a.ds_etapa,
    c.nr_seq_proj,
  
    'Imunização' A,
    case when coalesce(max(apseq.qtB),0) = 0 then 'Não' else 'Sim' end B,
    case when coalesce(max(apseq.qtC),0) = 0 then 'Não' else 'Sim' end C,
    case when coalesce(max(apseq.qtD),0) = 0 then 'Não' else 'Sim' end D,
    case when coalesce(max(apseq.qtE),0) = 0 then 'Não' else 'Sim' end E,
    case when coalesce(max(apseq.qtF),0) = 0 then 'Não' else 'Sim' end F,
  
    (case coalesce(max(apseq.totresultado),0)
        when 0 then 0
        when 1 then 20
        when 2 then 40
        when 3 then 60
        when 4 then 80
        when 5 then 100
    end) G,
  
    sum(a.QT_HORA_PREV) H,
    sum(a.QT_HORA_REAL) I,
  
    (case coalesce(max(apseq.totresultado),0)
        when 0 then 1
        when 1 then 20
        when 2 then 40
        when 3 then 60
        when 4 then 80
        when 5 then 100
    end) J,
  
    (sum(a.QT_HORA_REAL)*100) / coalesce(max(apseq.DivHr),100) - sum(a.QT_HORA_PREV) K,
  
    sum(a.QT_HORA_PREV) + (((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) L,
  
    case when sum(a.QT_HORA_PREV)+(((sum(a.QT_HORA_REAL)*100)/coalesce(max(apseq.DivHr),100))-sum(a.QT_HORA_PREV)) > sum(a.QT_HORA_PREV)
        then 'Neg'
        else 'Pos'
    end M
from
    PROJ_CRON_ETAPA a
inner join
    PROJ_CRONOGRAMA c on c.nr_sequencia = a.nr_seq_cronograma
left join
    (select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    ) apseq on apseq.nr_sequencia = c.nr_seq_proj and apseq.nr_seq_tipo_avaliacao = a.ds_etapa
where
    a.ds_etapa = '214'
    and c.nr_seq_proj = :nr_sequencia
group by
    a.ds_etapa,
    c.nr_seq_proj




As referências não estão nos Wheres ali???
GOSTEI 0
Leonardo Horning

Leonardo Horning

20/04/2020

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

passei o dia tentando entrar no fórum e só consegui agora (27/04/2020 18:07).

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

passei o dia tentando entrar no fórum e só consegui agora (27/04/2020 18:07).

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

passei o dia tentando entrar no fórum e só consegui agora (27/04/2020 18:07).

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

passei o dia tentando entrar no fórum e só consegui agora (27/04/2020 18:07).

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

então precisamos tratar apenas deste trecho:
    (select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou a etapa 165. do que se trata aquele 214 na instrução transcrita acima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

Então o problema está somente neste trecho:
  (select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

Os parâmetros foram corrigidos no trecho acima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

passei o dia tentando entrar no fórum e só consegui agora (27/04/2020 18:07).

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Cesar Azeredo

Cesar Azeredo

20/04/2020

Dependendo da complexidade dos cálculos, talvez seja mais interessante você criar uma view agrupando de forma intermediaria as informações e executar os selects em cima dessa view. Você pode criar também funções que, passando parâmetros, retornem resultados dentro do select. Ex: select soma_valores(:petapa) from...
GOSTEI 0
Cesar Azeredo

Cesar Azeredo

20/04/2020

Dependendo da complexidade dos cálculos, talvez seja mais interessante você criar uma view agrupando de forma intermediaria as informações e executar os selects em cima dessa view. Você pode criar também funções que, passando parâmetros, retornem resultados dentro do select. Ex: select soma_valores(:petapa) from...
GOSTEI 0
Cesar Azeredo

Cesar Azeredo

20/04/2020

Recomendo criar uma view condensando as informações e sobre ela executar o select.E/Ou usar funções para buscar informações passando parametros. Ex: select soma_etapa(a.codetapa,a.codpaciente) from ...
Dentro da função teria outro select somando valores por exemplo.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

passei o dia tentando entrar no fórum e só consegui agora (27/04/2020 18:07).

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

não consigo postar com a tags de codigo....
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Cesar Azeredo

Cesar Azeredo

20/04/2020

Tenta criar uma view agrupando dados e executa o select em cima dessa view. Você pode tambem criar funções que retornem informações no select, ex: select soma_sessao(a.paciente,a.seequencia) from ... para facilitar a montagem do select.
GOSTEI 0
Leonardo Horning

Leonardo Horning

20/04/2020

Só consegui ler agora, o forum tava meio bugado, vou testar isso e logo volto com uma resposta, valeu pessoal!
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

testei o código aqui com a ETAPA 165, puxou os dados certos apenas no campo H e no campo I
ótimo. então precisamos resolver somente o trecho:
(select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

você disse que testou com a etapa 165. o que é aquele 214 na instrução transcrita aí em cima?
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

20/04/2020

então precisa corrigir somente este trecho:
     (select
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao,
        sum(case when coalesce(r.nr_seq_item,0)=960 then r.qt_resultado else 0 end) qtB,
        sum(case when coalesce(r.nr_seq_item,0)=958 then r.qt_resultado else 0 end) qtC,
        sum(case when coalesce(r.nr_seq_item,0)=957 then r.qt_resultado else 0 end) qtD,
        sum(case when coalesce(r.nr_seq_item,0)=959 then r.qt_resultado else 0 end) qtE,
        sum(case when coalesce(r.nr_seq_item,0)=961 then r.qt_resultado else 0 end) qtF,
        sum(r.qt_resultado) totresultado,
        (case coalesce(sum(r.qt_resultado),0)
            when 0 then 100
            when 1 then 20
            when 2 then 40
            when 3 then 60
            when 4 then 80
            when 5 then 100
        end) DivHr
    from
        med_avaliacao_paciente ap
    left join
        med_avaliacao_result r on r.nr_seq_avaliacao = ap.nr_sequencia
    where
        (ap.cd_pessoa_fisica = :cd_pessoa_fisica or ap.cd_pessoa_fisica = 0)
        and ap.nr_seq_tipo_avaliacao = 214
    group by
        ap.nr_sequencia,
        ap.nr_seq_tipo_avaliacao
    )

Você disse que testou a etapa 165. Você trocou os valores necessários na instrução acima?
Faça as alterações necessárias para a instrução funcionar para a etapa 165 e publique aqui.
GOSTEI 0
POSTAR