Ótima dica Luciano
E pessoal
Fiz essa query para uma planilha onde irão controlar exatamente as ferias do pessoal.
Pode ser que ajude vocês também.
Você só precisarão informar as sessões e tipos de funcionários desejarão listar.
PS.: Se a melhorarem lembre-se do amigo aqui e compartilhe as melhorias também
SELECT
PSECAO.DESCRICAO AS 'DEPARTAMENTO',
PPESSOA.NOME,
PFUNC.DATAADMISSAO AS 'ADMISSAO',
PFUNC.DTVENCFERIAS AS 'VECTOFERIAS',
PFUNC.INICPROGFERIAS1 AS 'INICIOFERIAS',
PFUNC.FIMPROGFERIAS1 AS 'TERMINOFERIAS',
CASE WHEN HFERIAS.DTULTIMAFER > GETDATE() THEN 0 ELSE DATEDIFF(MONTH,GETDATE(),DATEADD(YEAR,1,HFERIAS.DTULTIMAFER)) END AS 'INTERVALOMES',
CASE
WHEN PFUNC.INICPROGFERIAS1 IS NULL AND GETDATE() >= DATEADD(MONTH,-3,DATEADD(YEAR,1,HFERIAS.DTULTIMAFER)) THEN 'ATENÇÃO'
WHEN PFUNC.INICPROGFERIAS1 IS NULL AND GETDATE() >= DATEADD(MONTH,-2,DATEADD(YEAR,1,HFERIAS.DTULTIMAFER)) THEN 'PERIGO'
WHEN PFUNC.INICPROGFERIAS1 IS NULL AND GETDATE() >= DATEADD(MONTH,-1,DATEADD(YEAR,1,HFERIAS.DTULTIMAFER)) THEN 'ESGOTADO'
WHEN PFUNC.INICPROGFERIAS1 IS NULL AND GETDATE() >= DATEADD(MONTH,-1,DATEADD(YEAR,1,HFERIAS.DTULTIMAFER)) THEN 'FERIAS EM DOBRO'
WHEN PFUNC.INICPROGFERIAS1 >= DATEADD(MONTH,-1,DATEADD(YEAR,1,HFERIAS.DTULTIMAFER)) THEN 'FERIAS EM DOBRO'
END AS 'ALARME'
FROM
PFUNC
INNER JOIN PPESSOA
ON
PFUNC.CODPESSOA = PPESSOA.CODIGO
LEFT JOIN PSECAO
ON
PFUNC.CODCOLIGADA = PSECAO.CODCOLIGADA AND
PFUNC.CODSECAO = PSECAO.CODIGO
LEFT JOIN PFUNCAO
ON
PFUNC.CODCOLIGADA = PFUNCAO.CODCOLIGADA AND
PFUNC.CODFUNCAO = PFUNCAO.CODIGO
LEFT JOIN VFAIXASALARIAL
ON
PFUNC.CODCOLIGADA = VFAIXASALARIAL.CODCOLIGADA AND
PFUNC.GRUPOSALARIAL = VFAIXASALARIAL.CODFAIXA
OUTER APPLY (SELECT MAX(PFHSTFER.DTFIMPERAQUIS) AS 'DTULTIMAFER' FROM PFHSTFER WHERE PFHSTFER.CODCOLIGADA = PFUNC.CODCOLIGADA AND PFHSTFER.CHAPA = PFUNC.CHAPA) HFERIAS
WHERE
PFUNC.CODCOLIGADA IN (1,2,3) AND
PFUNC.CODTIPO IN ('N','Z','T','U') AND
CODSITUACAO <> 'D' AND
(PFUNC.CODSECAO LIKE '1.01.01.%' OR PFUNC.CODSECAO LIKE '1.02.01.%')
ORDER BY
PSECAO.DESCRICAO,
PPESSOA.NOME