Logo Hardware.com.br
atirm82
atirm82 Novo Membro Registrado
16 Mensagens 0 Curtidas

admitidos e demitidos

#1 Por atirm82 21/10/2014 - 17:26
Sou iniciante em sql e preciso gerar uma consulta que me traga os admitidos e demitidos no mês em uma base sql server.
A consulta qu fiz gera apenas os admitidos e não sei como incluir os demitidos, se alguém puder ajudar:

SELECT PFUNC.CHAPA 'CHAPAADM',PFUNC.NOME 'NOMEADM', PFUNC.CODTIPO 'TIPOADM', PFUNC.CODSECAO 'CODSECAOADM', PSECAO.DESCRICAO 'SECAOADM',
PFUNC.DATAADMISSAO 'ADM', PFUNC.DATADEMISSAO 'DEMISSAOADM', COUNT (*) QUANTIDADEADM
FROM
PFUNC (NOLOCK)
LEFT JOIN PSECAO (NOLOCK) ON PSECAO.CODCOLIGADA = PFUNC.CODCOLIGADA AND PSECAO.CODIGO = PFUNC.CODSECAO
WHERE
PFUNC.CODCOLIGADA ='CODCOLIGADA'
AND PFUNC.CODSECAO LIKE 'CODSECAO'
AND PFUNC.DATAADMISSAO BETWEEN 'DATAINICIAL' AND 'DATAFINAL'
AND PFUNC.CODTIPO NOT IN ('A', 'D', 'T')
GROUP BY PFUNC.CHAPA,PFUNC.NOME, PFUNC.CODTIPO, PFUNC.CODSECAO, PSECAO.DESCRICAO,
PFUNC.DATAADMISSAO, PFUNC.DATADEMISSAO
ORDER BY PFUNC.CODSECAO
Gokuro
Gokuro Veterano Registrado
704 Mensagens 76 Curtidas
#2 Por Gokuro
22/10/2014 - 01:18
Baseado na tua expressão:
[code=SQL]SELECT
PFUNC.CHAPA 'CHAPAADM', PFUNC.NOME 'NOMEADM', PFUNC.CODTIPO 'TIPOADM',
PFUNC.CODSECAO 'CODSECAOADM', PSECAO.DESCRICAO 'SECAOADM',
PFUNC.DATAADMISSAO 'ADM', PFUNC.DATADEMISSAO 'DEMISSAOADM'
-- , COUNT (*) QUANTIDADEADM
FROM
PFUNC (NOLOCK) LEFT JOIN PSECAO (NOLOCK)
ON PSECAO.CODCOLIGADA = PFUNC.CODCOLIGADA AND PSECAO.CODIGO = PFUNC.CODSECAO
WHERE
PFUNC.CODCOLIGADA = 'CODCOLIGADA'
AND PFUNC.CODSECAO LIKE 'CODSECAO'
-- Admitidos no período
AND (PFUNC.DATAADMISSAO BETWEEN 'DATAINICIAL' AND 'DATAFINAL'
-- Demitidos no período
OR PFUNC.DATADEMISSAO BETWEEN 'DATAINICIAL' AND 'DATAFINAL')
--
AND PFUNC.CODTIPO NOT IN ('A', 'D', 'T')
-- GROUP BY
-- PFUNC.CHAPA, PFUNC.NOME, PFUNC.CODTIPO, PFUNC.CODSECAO, PSECAO.DESCRICAO,
-- PFUNC.DATAADMISSAO, PFUNC.DATADEMISSAO
ORDER BY
PFUNC.CODSECAO;[/code]
que listará admitidos e demitidos num período, desabilitando o uso de funções de agregação, ok? Primeiro seleciona, depois agrega.

[]'s
TRONNER
TRONNER Cyber Highlander Registrado
32.2K Mensagens 7.3K Curtidas
#4 Por TRONNER
22/10/2014 - 14:00
atirm82 disse:
perfeito, parceiro, valeu pela força!

Parece ser a linha TOTVS/RM referente ao labore, você você incluir esta consulta no gerador de planilhas dele e salvar em .xls caso necessite enviar por email ou para algum relatório gerencial também big_green.png
cool.png**Quando pensar ser um Golias, cuidado para não encontrar algum Davi**
veja.png Conheça os Poderosos e Gratuitos [ Iperius Backup ] e [ Iperius Remote ]
veja.png Todo dia um software novo e grátis [ clicando aqui ]
boa.gif Faça valer a sua voz com o Mudamos+ { https://www.mudamos.org }
atirm82
atirm82 Novo Membro Registrado
16 Mensagens 0 Curtidas
#5 Por atirm82
22/10/2014 - 14:39
É da TOTVS mesmo, a ideia é gerar um relatório, porém, preciso contar o total de admissões e demissões por seção, tentei agregar o count para cada admissao e demissao, conforme abaixo:
Porém ,não funcionou, como faço para contar as linhas de cada campo?

SELECT
PFUNC.CHAPA, PFUNC.NOME, PFUNC.CODTIPO,PFUNC.CODSECAO, PSECAO.DESCRICAO,
PFUNC.DATAADMISSAO, PFUNC.DATADEMISSAO, COUNT (DISTINCT PFUNC.DATADEMISSAO) QUANTDEM
FROM
PFUNC (NOLOCK) LEFT JOIN PSECAO (NOLOCK)
ON PSECAO.CODCOLIGADA = PFUNC.CODCOLIGADA AND PSECAO.CODIGO = PFUNC.CODSECAO
WHERE

PFUNC.DATAADMISSAO IN

(SELECT COUNT (DISTINCT PFUNC.DATAADMISSAO) WHERE
PFUNC.DATAADMISSAO BETWEEN '2014-09-01' AND '2014-09-30')

OR (PFUNC.DATADEMISSAO BETWEEN '2014-09-01' AND '2014-09-30')

AND PFUNC.CODCOLIGADA = '1'
AND PFUNC.CODSECAO LIKE '%'
AND PFUNC.CODTIPO NOT IN ('A', 'D', 'T')

GROUP BY PFUNC.CHAPA, PFUNC.NOME, PFUNC.CODTIPO,PFUNC.CODSECAO, PSECAO.DESCRICAO,
PFUNC.DATAADMISSAO, PFUNC.DATADEMISSAO
ORDER BY PFUNC.CODSECAO
atirm82
atirm82 Novo Membro Registrado
16 Mensagens 0 Curtidas
#7 Por atirm82
22/10/2014 - 15:15
Descobri a solução que segue abaixo:

SELECT
PFUNC.CHAPA, PFUNC.NOME, PFUNC.CODSECAO, PSECAO.DESCRICAO,
PFUNC.DATAADMISSAO, PFUNC.DATADEMISSAO,
(CASE WHEN PFUNC.DATADEMISSAO BETWEEN '2014-09-01' AND '2014-09-30' THEN COUNT (*) ELSE 0 END) QUANTDEM,

(CASE WHEN PFUNC.DATAADMISSAO BETWEEN '2014-09-01' AND '2014-09-30' THEN COUNT (*)
ELSE 0 END) QUANTADM

FROM
PFUNC (NOLOCK) LEFT JOIN PSECAO (NOLOCK)
ON PSECAO.CODCOLIGADA = PFUNC.CODCOLIGADA AND PSECAO.CODIGO = PFUNC.CODSECAO
WHERE
PFUNC.CODCOLIGADA = '1'
AND PFUNC.CODSECAO LIKE '%'
AND (PFUNC.DATAADMISSAO BETWEEN '2014-09-01' AND '2014-09-30'
OR PFUNC.DATADEMISSAO BETWEEN '2014-09-01' AND '2014-09-30')

AND PFUNC.CODTIPO NOT IN ('A', 'D', 'T')

GROUP BY PFUNC.CHAPA, PFUNC.NOME, PFUNC.CODTIPO,PFUNC.CODSECAO, PSECAO.DESCRICAO,
PFUNC.DATAADMISSAO, PFUNC.DATADEMISSAO

ORDER BY PFUNC.CODSECAO

Se souberem uma forma melhor! Me avisem, pois fiz por tentativa e erro.
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal