Ajuda em Código SQL ORACLE
20/04/2020
0
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
Posts
22/04/2020
Emerson Nascimento
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." ?
22/04/2020
Leonardo Horning
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!!
22/04/2020
Leonardo Horning
(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
22/04/2020
Emerson Nascimento
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
22/04/2020
Leonardo Horning
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!!!!
23/04/2020
Emerson Nascimento
24/04/2020
Leonardo Horning
24/04/2020
Emerson Nascimento
24/04/2020
Emerson Nascimento
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
24/04/2020
Leonardo Horning
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
24/04/2020
Emerson Nascimento
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
27/04/2020
Leonardo Horning
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???
27/04/2020
Leonardo Horning
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???
27/04/2020
Leonardo Horning
Clique aqui para fazer login e interagir na Comunidade :)