jasson nascimento Postado 4 de Abril Tópicos Que Criei: 21 Tópicos/Dia: 0.01 Meu Conteúdo: 44 Conteúdo/Dia: 0.01 Reputação: 2 Pontos/Conquistas: 435 Conteúdo Resolvido: 0 Dias Ganho: 2 Status: Offline Idade: 34 Dispositivo: Windows Denunciar Compartilhar Postado 4 de Abril Olá pessoal, boa tarde. Preciso de criar uma lista de funcionário com os seguintes campo: Nome do colaborador, Cargo, Data de admissão, Grau de Instrução/formação e Anotações. A busca desses campo estão ok. Porém eu estou com um dificuldade em duas questão na SQL. 1- Como ir buscar funcionário em outro anos. Tipo em 2023,2022,2021,2020,.. 2-E no caso do cargo. Porque pode ter acontecido mudança entre os anos. Desde já agradeço a ajuda. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Solução luisgustavogomes Postado 5 de Abril Tópicos Que Criei: 5 Tópicos/Dia: 0.00 Meu Conteúdo: 485 Conteúdo/Dia: 0.21 Reputação: 136 Pontos/Conquistas: 3.231 Conteúdo Resolvido: 0 Dias Ganho: 64 Status: Offline Idade: 35 Dispositivo: Windows Solução Denunciar Compartilhar Postado 5 de Abril @jasson nascimento, bom dia! Segue uma possibilidade em SQLServer... SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET NOCOUNT ON; DECLARE @CODCOLIGADA INT = 1; DECLARE @DATAINICIAL DATETIME = '2008-01-01' DECLARE @DATAFINAL DATETIME = '2023-12-31' DECLARE @DATAFINALAJS DATETIME = DATEADD(DAY,1, @DATAFINAL) ;WITH TAB_DATAS AS ( SELECT @DATAINICIAL AS 'DT' UNION ALL SELECT DATEADD(DAY,1,DT) FROM TAB_DATAS WHERE DT < @DATAFINAL ) , TAB_ANO AS ( SELECT DATETIMEFROMPARTS(ANO,12,31,23,59,59,997) AS 'DT', ANO FROM ( SELECT DISTINCT YEAR(DT) AS 'ANO' FROM TAB_DATAS ) T ) SELECT T.ANO ,T.DT ,P.CODCOLIGADA ,P.CHAPA ,P.DATAMUDANCA ,P.NOVASITUACAO ,F.CODFUNCAO_HIST ,F.NOME_FUNCAO_HIST FROM TAB_ANO T CROSS APPLY ( SELECT P2.CODCOLIGADA ,P2.CHAPA ,P2.DATAMUDANCA ,P2.NOVASITUACAO FROM ( SELECT P1.CODCOLIGADA ,P1.CHAPA ,P1.DATAMUDANCA ,P1.NOVASITUACAO ,ROW_NUMBER() OVER (PARTITION BY P1.CODCOLIGADA, P1.CHAPA ORDER BY P1.CODCOLIGADA, P1.CHAPA, P1.DATAMUDANCA DESC ) AS 'SEQ' FROM DBO.PFHSTSIT P1 WHERE P1.CODCOLIGADA = @CODCOLIGADA AND P1.DATAMUDANCA <= T.DT ) P2 WHERE P2.SEQ = 1 ) P OUTER APPLY ( SELECT H.CODCOLIGADA ,H.CODFUNCAO AS 'CODFUNCAO_HIST' ,F.NOME AS 'NOME_FUNCAO_HIST' FROM DBO.PFHSTFCO H JOIN DBO.PFUNCAO F ON (H.CODCOLIGADA = F.CODCOLIGADA AND H.CODFUNCAO = F.CODIGO) WHERE H.CODCOLIGADA = p.CODCOLIGADA AND H.CHAPA= P.CHAPA AND H.DTMUDANCA = (SELECT MAX(HH.DTMUDANCA) FROM DBO.PFHSTFCO HH WHERE HH.CODCOLIGADA = H.CODCOLIGADA AND HH.CHAPA = H.CHAPA AND HH.DTMUDANCA <= T.DT) ) F WHERE P.NOVASITUACAO NOT IN ('D') ORDER BY T.ANO, P.CHAPA OPTION (MAXDOP 1, MAXRECURSION 0) Essa query tem a abordagem de verificar o histórico de situação do funcionário! Logo, pode ter supressas... como eu tive de históricos incorretos... /* p/s Vou deixar aqui um outra formar de buscar os registros por grupo, para histórico. SELECT TOP 1 WITH TIES CODCOLIGADA ,CHAPA ,DATAMUDANCA ,NOVASITUACAO FROM DBO.PFHSTSIT WHERE CODCOLIGADA = 1 ORDER BY ROW_NUMBER() OVER (PARTITION BY CODCOLIGADA, CHAPA ORDER BY CODCOLIGADA, CHAPA, DATAMUDANCA DESC ) */ Espero lhe ajudar. Abraços 1 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
jasson nascimento Postado 5 de Abril Tópicos Que Criei: 21 Tópicos/Dia: 0.01 Meu Conteúdo: 44 Conteúdo/Dia: 0.01 Reputação: 2 Pontos/Conquistas: 435 Conteúdo Resolvido: 0 Dias Ganho: 2 Status: Offline Idade: 34 Dispositivo: Windows Autor Denunciar Compartilhar Postado 5 de Abril @luisgustavogomes Bom dia. Assim que eu chegar na empresa eu vou da uma testada. Mas desde já agradeço a ajuda. Att; Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Fórum RM Postado 5 de Abril Tópicos Que Criei: 47 Tópicos/Dia: 0.01 Meu Conteúdo: 349 Conteúdo/Dia: 0.06 Reputação: 7 Pontos/Conquistas: 2.126 Conteúdo Resolvido: 0 Dias Ganho: 4 Status: Offline Idade: 18 Denunciar Compartilhar Postado 5 de Abril Seu tópico foi movido para outra área no ForumRM Mudamos o mesmo de: Sistemas RM > [RM] Dúvidas e Suporte Para o fórum: Sistemas RM > [RM] Scripts SQL e Bancos de Dados Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
luisgustavogomes Postado 9 de Abril Tópicos Que Criei: 5 Tópicos/Dia: 0.00 Meu Conteúdo: 485 Conteúdo/Dia: 0.21 Reputação: 136 Pontos/Conquistas: 3.231 Conteúdo Resolvido: 0 Dias Ganho: 64 Status: Offline Idade: 35 Dispositivo: Windows Denunciar Compartilhar Postado 9 de Abril Bom dia Vou incluir uma variação que resulta mês a mês. SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SET NOCOUNT ON; DECLARE @CODCOLIGADA INT = 1; DECLARE @DATAINICIAL DATETIME = '2023-01-01' DECLARE @DATAFINAL DATETIME = '2023-12-31' DECLARE @DATAFINALAJS DATETIME = DATEADD(DAY,1, @DATAFINAL) ;WITH TAB_DATAS AS ( SELECT @DATAINICIAL AS 'DT' UNION ALL SELECT DATEADD(DAY,1,DT) FROM TAB_DATAS WHERE DT < @DATAFINAL ) , TAB_ANO AS ( SELECT DATETIMEFROMPARTS(YEAR(T.DT), MONTH(T.DT), DAY(T.DT),23,59,59,997) AS 'DT',YEAR(T.DT) AS 'ANO' , MONTH(T.DT) AS 'MES' FROM ( SELECT DISTINCT EOMONTH(DATEFROMPARTS(YEAR(DT), MONTH(DT),1),0) AS 'DT' FROM TAB_DATAS ) T ) SELECT T.ANO ,T.DT ,P.CODCOLIGADA ,P.CHAPA ,P.DATAMUDANCA ,P.NOVASITUACAO ,F.CODFUNCAO_HIST ,F.NOME_FUNCAO_HIST FROM TAB_ANO T CROSS APPLY ( SELECT P2.CODCOLIGADA ,P2.CHAPA ,P2.DATAMUDANCA ,P2.NOVASITUACAO FROM ( SELECT P1.CODCOLIGADA ,P1.CHAPA ,P1.DATAMUDANCA ,P1.NOVASITUACAO ,ROW_NUMBER() OVER (PARTITION BY P1.CODCOLIGADA, P1.CHAPA ORDER BY P1.CODCOLIGADA, P1.CHAPA, P1.DATAMUDANCA DESC ) AS 'SEQ' FROM DBO.PFHSTSIT P1 WHERE P1.CODCOLIGADA = @CODCOLIGADA AND P1.DATAMUDANCA <= T.DT ) P2 WHERE P2.SEQ = 1 ) P OUTER APPLY ( SELECT H.CODCOLIGADA ,H.CODFUNCAO AS 'CODFUNCAO_HIST' ,F.NOME AS 'NOME_FUNCAO_HIST' FROM DBO.PFHSTFCO H JOIN DBO.PFUNCAO F ON (H.CODCOLIGADA = F.CODCOLIGADA AND H.CODFUNCAO = F.CODIGO) WHERE H.CODCOLIGADA = p.CODCOLIGADA AND H.CHAPA= P.CHAPA AND H.DTMUDANCA = (SELECT MAX(HH.DTMUDANCA) FROM DBO.PFHSTFCO HH WHERE HH.CODCOLIGADA = H.CODCOLIGADA AND HH.CHAPA = H.CHAPA AND HH.DTMUDANCA <= T.DT) ) F WHERE P.NOVASITUACAO NOT IN ('D') ORDER BY T.ANO, P.CHAPA OPTION (MAXDOP 1, MAXRECURSION 0) Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
jasson nascimento Postado 9 de Abril Tópicos Que Criei: 21 Tópicos/Dia: 0.01 Meu Conteúdo: 44 Conteúdo/Dia: 0.01 Reputação: 2 Pontos/Conquistas: 435 Conteúdo Resolvido: 0 Dias Ganho: 2 Status: Offline Idade: 34 Dispositivo: Windows Autor Denunciar Compartilhar Postado 9 de Abril (editado) @luisgustavogomes Muito obrigado pela ajuda.. Já testei e funcionou. Valeu. Editado 9 de Abril por jasson nascimento 1 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
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.