Ir para conteúdo
AVISO AOS MEMBROS:

Fizemos uma atualização em 18/06/2023, e a forma de acesso ao Fórum mudou. Não mais está sendo aceito o login pelo Nome de Exibição cadastrado. Agora, apenas pelo email e pelos integradores de Login do Facebook, Google e Microsoft. O Facebook estava com uma validação pendente e já foi normalizado o acesso, já o Google, ainda estamos verificando o que está ocorrendo que não está funcionando.
Caso precisem de ajuda para o login pelo email acesse o link << Esqueci minha senha de acesso>> ou nos envie um pedido de ajuda pelo email admin@forumrm.com.br

Administração
ForumRM

Dúvida sentença SQL<b> (Resolvido)</b>


Excluído

Posts Recomendados


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Bom dia pessoal, tenho uma sentença SQL que quando o funcionário têm o mesmo código de evento em períodos diferentes dentro da mesma competência ela duplica todos os eventos da ficha financeira, exemplo:

Competência Fevereiro/2008 Período 1

Evento 0013

Evento 0102

Evento 0402

Competência Fevereiro/2008 Período 10

Evento 0002

Evento 0039

Evento 0040

Evento 0084

Evento 0086

Evento 0088

Evento 0153

Evento 0401

Evento 0402

Evento 0403

Evento 0409

Evento 0410

Evento 0414

Evento 0432

Evento 0459

Vejam que somente o evento 0402 se repete em períodos diferentes, porém no resultado da SQL, todos os outros eventos são duplicados!

Sentença SQL:

select a.codsecao, c.descricao, a.codfilial, a.nome, a.chapa, a.codhorario, a.salario,

isnull(sum(b.ref),0.00), isnull(sum(b.valor),0.00),

isnull(sum(br.valor),0.00)

from pfunc a

left outer join pffinanc b on a.codcoligada = b.codcoligada

and a.chapa = b.chapa

and b.codevento in (0002)

and b.mescomp =:PLN_B$3$_N

and b.anocomp =:PLN_B$4$_N

and b.nroperiodo <>20

left outer join pffinanc br on a.codcoligada = br.codcoligada

and a.chapa = br.chapa

and br.codevento in (0402)

and br.mescomp =:PLN_B$3$_N

and br.anocomp =:PLN_B$4$_N

and br.nroperiodo <>20

left outer join psecao c on a.codcoligada = c.codcoligada

and a.codsecao = c.codigo

left outer join pfuncao d on a.codcoligada = d.codcoligada

and a.codfuncao = d.codigo

WHERE

a.codfilial like:PLN_B$1$_S

and a.codsecao like:PLN_B$2$_S

and a.codcoligada = 1

and (b.valor > 0 or br.valor > 0)

GROUP BY a.codsecao, c.descricao, a.codfilial, a.nome, a.chapa, a.codhorario, a.salario

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Socorro!!!

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Alguém?

Link para comentar
Compartilhar em outros sites

  • 1 mês depois...

  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Alguém pode me ajudar a fechar esse tópico?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  39
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  174
  • Conteúdo/Dia:  0.03
  • Reputação:   0
  • Pontos/Conquistas:  1.255
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  48

Jefferson Bruzati,

Vc ja Tentou usar uma Union em vez de usar a pffinanc com referências diferentes ('BR','B'), vejo que left outer join e por razão da restrição dos eventos, ou eu estou engando?

sds

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Cláudio, eu sou leigo em SQL, como poderia usar o union nessa sentença, o quê devo mudar?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

O que vc está querendo saber na verdade com o seu select ????

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

EVENTOS_FICHA_FINANCEIRA.rarA finalidade é retornar o valor de determinados eventos da folha de pagamento em colunas, funcionário a funcionário, deixando como parâmetro a escolha da filial, setor, mês e ano, segue planilha em anexo:
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  39
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  174
  • Conteúdo/Dia:  0.03
  • Reputação:   0
  • Pontos/Conquistas:  1.255
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  48

Meu caro, o que vc está precisando é de uma select que te retorne a tua folha analitica e os valores dos eventos dos funcionarios nas determinadas filiais e nos determinados periodos.. com os parametros das filias e periodos não e isso?, salvo to enganado já ví essa planilha aqui no Forum, dar uma olhada na seção de cubos..

sds

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Eu já havia analisado esse cubo, mas no meu caso não ajuda.

Obrigado!

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

Jefferson, cara, é mais ou menos isso mesmo. Mudei aqui a sentença e está retornando correto. Olha ai:

select top 30

a.codsecao, 'Nome do Funcionario... ' Nome,

-- c.descricao, a.codfilial, a.nome, a.chapa,

a.codhorario, a.salario,

isnull(sum(b.ref),0.00) RefB,

isnull(sum(b.valor),0.00) ValorB, -- valor do Evento 0002

isnull(sum(br.ref),0.00) RefBR,

isnull(sum(br.valor),0.00) ValorBR-- Valor do Evento 0402

from pfunc a

left outer join pffinanc b on a.codcoligada = b.codcoligada

and a.chapa = b.chapa

and b.codevento in ('0002')

--and b.mescomp =:PLN_B$3$_N

--and b.anocomp =:PLN_B$4$_N

and b.mescomp = 3

and b.anocomp = 2008

and b.nroperiodo <>20

left outer join pffinanc br on a.codcoligada = br.codcoligada

and a.chapa = br.chapa

and br.codevento in ('0004')

--and br.mescomp =:PLN_B$3$_N

--and br.anocomp =:PLN_B$4$_N

and br.mescomp = 3

and br.anocomp = 2008

and br.nroperiodo <>20

left outer join psecao c on a.codcoligada = c.codcoligada

and a.codsecao = c.codigo

left outer join pfuncao d on a.codcoligada = d.codcoligada

and a.codfuncao = d.codigo

WHERE

--a.codfilial like:PLN_B$1$_S

--and a.codsecao like:PLN_B$2$_S

a.codfilial >=0

and a.codsecao >= '0'

and a.codcoligada = 2

and (b.valor > 0 or br.valor > 0)

GROUP BY a.codsecao, c.descricao, a.codfilial, a.nome, a.chapa, a.codhorario, a.salario

** resultado neste exemplo... Mudei pra mostrar apenas 30 primeiros registros, e apenas

** para quem tinha o valor do evento 0004 ( IRRF ) foi mostrado algo na segunda coluna do valor.

CodSecao Nome ................ CodHor.. Salario. .RefB. .ValorB. .RefBR. .ValorBR.

01.003 Nome do Funcionario... 020 4390.62 30.00 4390.62 27.50 452.83

01.003 Nome do Funcionario... 020 4390.62 30.00 4390.62 27.50 528.72

01.003 Nome do Funcionario... 066 3077.06 30.00 3077.06 15.00 184.79

01.003 Nome do Funcionario... 066 3077.06 30.00 3077.06 15.00 184.79

01.003 Nome do Funcionario... 025 4390.62 30.00 4390.62 27.50 528.72

01.027 Nome do Funcionario... 026 620.55 18.00 372.33 .00 .00

01.024 Nome do Funcionario... 026 988.68 30.00 988.68 .00 .00

01.003 Nome do Funcionario... 066 4390.62 30.00 4390.62 27.50 528.72

01.039 Nome do Funcionario... 026 1671.17 1.00 55.71 .00 .00

01.024 Nome do Funcionario... 026 2032.29 10.00 677.43 .00 .00

01.003 Nome do Funcionario... 025 3077.06 30.00 3077.06 15.00 184.79

01.024 Nome do Funcionario... 026 2032.29 30.00 2032.29 15.00 116.49

01.003 Nome do Funcionario... 025 3077.06 30.00 3077.06 15.00 105.68

01.026 Nome do Funcionario... 026 1257.09 30.00 1257.09 .00 .00

01.003 Nome do Funcionario... 026 2949.67 30.00 2949.67 15.00 187.81

01.003 Nome do Funcionario... 025 3077.06 30.00 3077.06 15.00 77.57

01.024 Nome do Funcionario... 026 2112.92 30.00 2112.92 15.00 28.16

01.024 Nome do Funcionario... 026 2112.92 30.00 2112.92 15.00 118.81

01.024 Nome do Funcionario... 026 2032.29 30.00 2032.29 15.00 154.55

01.024 Nome do Funcionario... 026 2032.29 30.00 2032.29 15.00 137.73

01.024 Nome do Funcionario... 026 2112.92 30.00 2112.92 .00 .00

01.030 Nome do Funcionario... 219 1021.40 30.00 1021.40 .00 .00

01.024 Nome do Funcionario... 026 2808.59 30.00 2808.59 15.00 169.02

01.024 Nome do Funcionario... 026 2032.29 30.00 2032.29 15.00 145.49

01.030 Nome do Funcionario... 219 1021.40 30.00 1021.40 .00 .00

01.003 Nome do Funcionario... 025 3077.06 30.00 3077.06 15.00 164.10

01.003 Nome do Funcionario... 025 4390.62 30.00 4390.62 27.50 528.72

01.003 Nome do Funcionario... 025 4390.62 30.00 4390.62 27.50 528.72

01.024 Nome do Funcionario... 026 2032.29 26.00 1761.32 15.00 21.10

01.039 Nome do Funcionario... 061 1671.17 30.00 1671.17 15.00 43.66

Link para comentar
Compartilhar em outros sites

  • 1 mês depois...

  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Jair, continua duplicando, dá uma olhada por favor:

post-19-1213111546_thumb.jpg

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Jefferson,

O problema dessa sentença é que vocês está trazendo duas vezes a tabela PFFINANC. Você deve unir a segunda tabela com as mesmas chaves da primeira, ou seja, CODCOLIGADA, CHAPA, CODEVENTO, NROPERIODO. Mas isso não dará certo, porque você terá que ter o mesmo Evento nos dois períodos.

Para solucionar seu problema você deve deixar a PFFINANC uma única vez e fazer um CASE para trazer valor ora num Evento ora em outro.

Entendeu?

Att,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Então Maffra, vc pode me ajudar a montar essa nova sentença, sou leigo em SQL.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

select a.codsecao, c.descricao, a.codfilial, a.nome, a.chapa, a.codhorario, a.salario,

CASE WHEN B.CODEVENTO = '0002' THEN isnull(sum(b.ref),0.00)

ELSE 0

END,

CASE WHEN B.CODEVENTO = '0002' THEN isnull(sum(b.valor),0.00)

ELSE 0

END,

CASE WHEN B.CODEVENTO = '0402' THEN isnull(sum(B.valor),0.00)

ELSE 0

END

from pfunc a

left outer join pffinanc b on a.codcoligada = b.codcoligada

and a.chapa = b.chapa

and b.codevento in ('0002','0402')

and b.mescomp =:PLN_B$3$_N

and b.anocomp =:PLN_B$4$_N

and b.nroperiodo <>20

left outer join psecao c on a.codcoligada = c.codcoligada

and a.codsecao = c.codigo

left outer join pfuncao d on a.codcoligada = d.codcoligada

and a.codfuncao = d.codigo

WHERE

a.codfilial like:PLN_B$1$_S

and a.codsecao like:PLN_B$2$_S

and a.codcoligada = 1

and (b.valor > 0 or br.valor > 0)

GROUP BY a.codsecao, c.descricao, a.codfilial, a.nome, a.chapa, a.codhorario, a.salario

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Maffra, a sentença está dando erro e com esse select eu consigo setar um evento para cada coluna na planilha, exemplo:

0002 0402

500,00 150,00

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Consegui, segue o que foi alterado:

select a.codsecao, c.descricao, a.codfilial, a.nome, a.chapa, a.codhorario, a.salario,

CASE WHEN B.CODEVENTO = '0002' THEN isnull(sum(b.ref),0.00)

ELSE 0

END,

CASE WHEN B.CODEVENTO = '0002' THEN isnull(sum(b.valor),0.00)

ELSE 0

END,

CASE WHEN B.CODEVENTO = '0402' THEN isnull(sum(B.valor),0.00)

ELSE 0

END

from pfunc a

left outer join pffinanc b on a.codcoligada = b.codcoligada

and a.chapa = b.chapa

and b.codevento in ('0002','0402')

and b.mescomp =:PLN_B$3$_N

and b.anocomp =:PLN_B$4$_N

and b.nroperiodo <>20

left outer join psecao c on a.codcoligada = c.codcoligada

and a.codsecao = c.codigo

left outer join pfuncao d on a.codcoligada = d.codcoligada

and a.codfuncao = d.codigo

WHERE

a.codfilial like:PLN_B$1$_S

and a.codsecao like:PLN_B$2$_S

and a.codcoligada = 1

and (b.valor > 0 or br.valor > 0)

GROUP BY a.codsecao, c.descricao, a.codfilial, a.nome, a.chapa, a.codhorario, a.salario, b.codevento

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

é... na pressa eu fiz um relacionamento errado e escrevi um campo errado....

falha técnica....

tópico resolvido???

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Cara, vc chegou pra fazer a diferença mesmo, vou analisar antes de dar como resolvido, mas agradeço a agilidade e presteza.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Que isso Jefferson,

não é nada... estamos aqui pra isso.

Quando tiver 'ok' manda um novo post para podermos colocar como resolvido, assim você também nos ajuda.

Obrigado,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

Putz até no meu exemplo que lhe enviei estava realmente duplicando alguns casos e não vi.

Que bom que o Maffra deu uma força ai e resolveu.

Mais uma vez, valeu a força ae Maffra. :cray:

Link para comentar
Compartilhar em outros sites


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

Jefferson, acho que esta Planilha pode te ajudar, altere os eventos nela e faça um teste.

Abraço

EVENTOS_POR_COLUNAS.rar

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Valeu sidroch@, mas essa planilha é exatamente igual a minha planilha original, cuidado que essa planilha duplica os valores, qualquer dúvida leia o início do tópico.

Agradeço sua atenção!

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

Bom dia Maffra, estou direcionando a resposta para vc devido a estar mais por dentro do assunto, mas vale pra todos os membros, nessa sentença eu fui obrigado a acrescentar o group by b.codevento, porém o resultado da planilha aparece uma linha para cada evento, até ai tudo bem, por isso o group by b.codevento, porém eu quero que saia todos os eventos na mesma linha, como fazer?

Obrigado

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Jefferson,

Você está sendo obrigado a colocar o GROUP BY do CODEVENTO por que o SUM está para o campo B.VALOR.

Se você tirar o SUM do B.VALOR e colocá-lo no CASE você não precisará agrupá-lo e ficará da forma mais correta e aplicável.

Veja exemplo:

A forma como está:

CASE WHEN B.CODEVENTO = '0002' THEN isnull(sum(b.ref),0.00)

ELSE 0

END

Substitua para:

SUM(CASE WHEN B.CODEVENTO = '0002' THEN isnull((b.ref),0.00)

ELSE 0

END)

e retire o "b.codevento" do GROUP BY

Att,

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.