Ir para conteúdo
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×
Quer acesso a todas as Áreas do Fórum, até aquelas só para membros VIPs? Também quer poder baixar qualquer ARQUIVO? ×

Duvidas com comando CASE WHEN


Posts Recomendados


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  55
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  415
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  61

Bom dia amigos.

Criei planilha no RM Labore com a utilização da sentença abaixo, e o problema é que a soma do valor do encargo está acunulando com a soma dos eventos da primeira linha de CASE(???)

após a "s.descricao".

Se alguem puder me indicar o erro na sentença eu agradeço.

Abraços.

----------------------------------

Select s.codigo,

s.descricao,

sum(CASE WHEN F.CODEVENTO IN ('0001','0002','0037','0046','0139', '0195','0141') THEN f.valor ELSE 0 END) /*salarioMes*/,

sum(CASE WHEN E.CODENCARGO IN ('0057') THEN e.valor ELSE 0 END) /*REM. BRUTA*/,

sum(CASE WHEN F.CODEVENTO IN ('0154','0162') THEN f.valor ELSE 0 END) /*AX. CRECHE*/,

sum(CASE WHEN F.CODEVENTO IN ('0228') THEN f.valor ELSE 0 END) /*HE50%*/,

sum(CASE WHEN F.CODEVENTO IN ('0387','0388') THEN f.valor ELSE 0 END) /*HE60%*/,

sum(CASE WHEN F.CODEVENTO IN ('0242') THEN f.valor ELSE 0 END) /*HE65%*/,

sum(CASE WHEN F.CODEVENTO IN ('0124','0377') THEN f.valor ELSE 0 END) /*HE75%*/,

sum(CASE WHEN F.CODEVENTO IN ('0010') THEN f.valor ELSE 0 END) /*HE95%*/,

sum(CASE WHEN F.CODEVENTO IN ('0111') THEN f.valor ELSE 0 END) /*HE100%*/,

sum(CASE WHEN F.CODEVENTO IN ('0113','0291','0294','0331','0332', '0359','378','0391','0214') THEN f.valor ELSE 0 END) /*DSR*/,

sum(CASE WHEN F.CODEVENTO IN ('0116','0329','0439','0360','0357','0358','0136') THEN f.valor ELSE 0 END) /*Ad.Not*/,

sum(CASE WHEN F.CODEVENTO IN ('0149','0186','0240','0212','0076') THEN f.valor ELSE 0 END) /*PREMIO*/,

sum(CASE WHEN F.CODEVENTO IN ('0157') THEN f.valor ELSE 0 END) /*PLR*/,

sum(CASE WHEN F.CODEVENTO IN ('0024','0025','0064','0048','0071', '0258','0277','0281','0121','035','0063','0266','0340','0341','0343','0345') THEN f.valor ELSE 0 END) /*INDENIZATÓRIOS*/

from pfunc p

left join psecao s on p.codcoligada=s.codcoligada and p.codsecao=s.codigo

left join pfencargo e on p.codcoligada=e.codcoligada and p.chapa=e.chapa

and e.mescomp= :PLN_$S$7_N

and e.anocomp= :PLN_$T$7_N

and e.codencargo in('0057')

left join pffinanc f on p.codcoligada=f.codcoligada and p.chapa=f.chapa

and f.mescomp= :PLN_$S$7_N

and f.anocomp= :PLN_$T$7_N

and f.codevento in ('0001','0002','0037','0046','0139','0195','0141','0154','0162','0228',

'0387','0388','0242','0124','0377','0113','0291','0294','0331','0332','0359','378','0391','0214')

Where p.codcoligada= :PLN_$E$2_N

and (p.codsituacao <>'D' or p.datademissao>= :PLN_$E$1_D )

and (p.tipoadmissao<>'T' or p.dttransferencia<= :PLN_$E$1_D )

and (f.valor>=0 or e.valor>=0)

group by s.codigo,

s.descricao

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  8
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  41
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  285
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  37

já executou essa sentença no SQL?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  55
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  415
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  61

já executou essa sentença no SQL?

Boa tarde Renato.

Esecutei sim pelo SQL Explorer e está retornando como na planilha.

Trocando os campos da psecao por pfunc chapa e nome, observa-se que nesta coluna do CASE está retornando funcionários de várias seções.

Acho que não está aceitando o relacionamento PFUNC e PSECAO...

Abraços.

Alexandre.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  8
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  41
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  285
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  37

depois de todos os CASES, tem o FROM PFUNC P, certo? Altere chamando PSECAO e onde está o LEFT JOIN PSECAO S coloque PFUNC, faça este teste..

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  55
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  415
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  61

depois de todos os CASES, tem o FROM PFUNC P, certo? Altere chamando PSECAO e onde está o LEFT JOIN PSECAO S coloque PFUNC, faça este teste..

Não alterou o resultado...

Alexandre.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  8
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  41
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  285
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  37

cria uma nova sentença e coloca um case de cada vez... coloca um case e executa, verifica como ficou, depois coloca outro case e assim vai.. outra coisa, testou retirando os campos da psecao?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  55
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  415
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  61

cria uma nova sentença e coloca um case de cada vez... coloca um case e executa, verifica como ficou, depois coloca outro case e assim vai.. outra coisa, testou retirando os campos da psecao?

Todos os CASE's retornam os valores corretos (separado ou agrupado), esceto o E.CODENCARGO,.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  52
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  405
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Tente tirar o CASE do codencargo... voce já está fixando o código do mesmo no WHERE logo abaixo... como fica?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  65
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  333
  • Conteúdo/Dia:  0.05
  • Reputação:   2
  • Pontos/Conquistas:  2.309
  • Conteúdo Resolvido:  0
  • Dias Ganho:  2
  • Status:  Offline
  • Idade:  46
  • Dispositivo:  Windows

troca o Left Join por Inner Join pra que traga somente o relacionamenro da pfunc e da psecao

Abraços

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  14
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  55
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  415
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  61

Bom dia a todos.

Efetuei as alterações trocando o left join por inner join no relacionamento da psecao, suprimi o case da PFENCARGO

isoladamente e em conjunto e o resulado não alterou com nenhuma das alterações...

É muito esquisito...

Abraços a todos.

Alexandre.

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.