Ajuda em Código SQL ORACLE
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
Respostas
Emerson Nascimento
20/04/2020
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." ?
Leonardo Horning
20/04/2020
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!!
Emerson Nascimento
20/04/2020
Leonardo Horning
20/04/2020
(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
Emerson Nascimento
20/04/2020
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
Leonardo Horning
20/04/2020
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!!!!
Emerson Nascimento
20/04/2020
Leonardo Horning
20/04/2020
Emerson Nascimento
20/04/2020
Emerson Nascimento
20/04/2020
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
Leonardo Horning
20/04/2020
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
Emerson Nascimento
20/04/2020
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
Leonardo Horning
20/04/2020
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???
Leonardo Horning
20/04/2020
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???
Leonardo Horning
20/04/2020
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
(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?
Cesar Azeredo
20/04/2020
Cesar Azeredo
20/04/2020
Cesar Azeredo
20/04/2020
Dentro da função teria outro select somando valores por exemplo.
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
Emerson Nascimento
20/04/2020
(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?
Cesar Azeredo
20/04/2020
Leonardo Horning
20/04/2020
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
(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?
Emerson Nascimento
20/04/2020
(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.