Usuário com melhor resposta
Quantidade de Funcionários Ativos

Pergunta
-
Bom dia!
Estou novamente precisando da ajuda de vocês.
Preciso de um sql que mostre a quantidade de funcionários ativos por mês.
Acontece que apenas dando um select cont(*) from funcionarios where datademiss = '' não funciona.
Trabaho com o um sistema que permite que se simule uma rescisão e ele armazena essa data dentro da tabela mesmo o funcionário não sendo demitido.Acontece que para que um funcionário seja realmente demitido ele tem que estar com o status 'S' e esse campo está em outra tabela onde armazena apenas os funcionários realmente demitidos
Tentei ela elaborar um select assim porém mesmo assim não está trazendo a quantidade correta.
(SELECT cont(*) FROM funcionarios T
LEFT JOIN demissao_efetivada G ON G.FILIAL = T.FILIAL AND G.MAT = T.MAT
WHERE (T.data_Admissao <= '20160930')AND (G.RG_DATADEM > '20160901' OR G.RG_DATADEM = '' )
AND G.status_dem_efetivada= 'S' AND T.D_E_L_E_T_ <> '*'AND G.D_E_L_E_T_ <> '*' )
Alguém poderia me ajudar?Preciso que esse select me mostre os funcionários ativos no mês em que eu informar.
Respostas
-
Olá Carine,
Veja o procedimento abaixo.
SELECT count (t.MAT) as total FROM funcionarios T where not exists ( select top 1 G.FILIAL from demissao_efetivada G where G.FILIAL = T.FILIAL AND G.MAT = T.MAT and G.status_dem_efetivada= 'S' AND G.D_E_L_E_T_ not like '*' ) and Month(T.data_Admissao)=month('20160930') and Year(T.data_Admissao)=Year('20160930') and T.D_E_L_E_T_ not like '*'
Abraços
Ricardo Lacerda
- Editado Ricardo Lacerda terça-feira, 20 de setembro de 2016 15:20
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 20 de setembro de 2016 15:42
- Marcado como Resposta carine.couto quinta-feira, 22 de setembro de 2016 12:06
Todas as Respostas
-
O campo RG_DATADEM é do tipo datetime?
Se for, o correto ¸comparar com Null e nao com vazio.
SELECT cont(*) FROM funcionarios T
LEFT JOIN demissao_efetivada G ON G.FILIAL = T.FILIAL AND G.MAT = T.MAT
WHERE (T.data_Admissao <= '20160930')AND (G.RG_DATADEM > '20160901' OR G.RG_DATADEM is null )
AND G.status_dem_efetivada= 'S' AND T.D_E_L_E_T_ <> '*'AND G.D_E_L_E_T_ <> '*'att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
-
Todos os campos desse banco são do tipo texto.
Mesmo eu alterando, colocando G.RG_DATADEM is null ele não me traz o valor correto.
É como se ele trouxesse apenas todos os demitidos.
- Editado carine.couto terça-feira, 20 de setembro de 2016 14:48 ajuste resposta
-
Bom dia,
Carine, experimente colocar a coluna G.status_dem_efetivada dentro do Count no lugar do *.
Espero que ajude
Assinatura: http://www.imoveisemexposicao.com.br
-
Todos os campos desse banco são do tipo texto.
Mesmo eu alterando, colocando G.RG_DATADEM is null ele não me traz o valor correto.
É como se ele trouxesse apenas todos os demitidos.
Sim.. Sua query traz somente os demitidos porque voce filtra G.status_dem_efetivada= 'S' (pelo que eu entendi isso é verdade somente para os demitidos)
Se voce quer somente os ativos, entao na verdade voce tem que buscar o que nao é status S
G.status_dem_efetivada<> 'S'
Att
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Editado William John Adam Trindade terça-feira, 20 de setembro de 2016 15:19
-
Olá Carine,
Veja o procedimento abaixo.
SELECT count (t.MAT) as total FROM funcionarios T where not exists ( select top 1 G.FILIAL from demissao_efetivada G where G.FILIAL = T.FILIAL AND G.MAT = T.MAT and G.status_dem_efetivada= 'S' AND G.D_E_L_E_T_ not like '*' ) and Month(T.data_Admissao)=month('20160930') and Year(T.data_Admissao)=Year('20160930') and T.D_E_L_E_T_ not like '*'
Abraços
Ricardo Lacerda
- Editado Ricardo Lacerda terça-feira, 20 de setembro de 2016 15:20
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 20 de setembro de 2016 15:42
- Marcado como Resposta carine.couto quinta-feira, 22 de setembro de 2016 12:06
-