Apresentar histórico em data em Colunas de meses

01/07/2017

0

Pessoal, Bom Dia!

Tenho uma tabela com histórico salarial de empregados e quero apresentar o salário em todos os meses de um período mesmo que não tenha histórico para o respectivo mês:

Dados:
01/01/2016 - 3.200
01/05/2016 - 4.000
01/10/2016 - 5.400

Apresentação dos Dados:
jan fev mar abr mai jun jul ago set out nov dez
3200 3200 3200 3200 4000 4000 4000 4000 4000 5400 5400 5400r

Note que no mês há histórico salarial é apresentado o salário anterior


Obrigado.
Juarez Cordeiro

Juarez Cordeiro

Responder

Posts

01/07/2017

Fabiano Carvalho

Qual o banco de dados?
Voce pode fazer utilizar pivot!
Responder

03/07/2017

Juarez Cordeiro

Olá,

O Banco de Dados é SQL Server.
Se usar o Pivot sim, nesse caso faria a conversão de Data para mês e até ai tudo bem.
Porém não consegui preencher os meses que não tem registro de histórico de datas.

Obrigado.
Responder

04/07/2017

Juarez Cordeiro

Pessoal, Bom Dia!

Alguém consegue dar um opinião sobre o tema?

Obrigado,
Responder

05/07/2017

Lincon Silva

Juarez, boa noite.

Vi agora teu post, a unica forma que me veio à mente agora foi adicionando os itens uma uma tabela temporária (de qualquer tipo) e depois realizando a leitura da mesmo, com a nova tabela temporária tu adiciona o PIVOT Table pra ficar da forma que você quer, vê se te atende, qualquer coisa amanhã vejo com mais calma:


-- Quantidade de Meses que vai rodar no Whille
DECLARE @MESES INT = (DATEDIFF(MONTH, (SELECT MIN(DATA) FROM [TUA_TABELA]),(SELECT MAX(DATA) FROM [TUA_TABELA])))

-- Criando uma tabela temporária com dois valores para fins de teste
DECLARE @TABELA_TEMPORARIA TABLE (DATA DATETIME, VALOR MONEY)

-- Criando um contador pra ser usado no While
DECLARE @CONT INT = 0

-- Pegando a primeira data da sequencia
DECLARE @DATA_INICIO DATETIME = (SELECT MIN(DATA) FROM [TUA_TABELA])

-- Inicio While
WHILE(@CONT <= @MESES)
BEGIN

-- Inserindo na temporária o valor da tabela, caso seja null ele adiciona o valor criado para suprir os nulos
		INSERT INTO @TABELA_TEMPORARIA(DATA,VALOR)
		VALUES(
				DATEADD(MONTH, @CONT,@DATA_INICIO),
				ISNULL(
				(SELECT TOP 1 VALOR FROM [TUA_TABELA]
				WHERE (DATA = DATEADD(MONTH, @CONT,@DATA_INICIO))),
				(SELECT TOP 1 VALOR FROM @TABELA_TEMPORARIA ORDER BY DATA DESC))
				) 
		

		SET @CONT = @CONT + 1
END

SELECT * FROM @TABELA_TEMPORARIA


Abraço
Responder

05/07/2017

Lincon Silva

Esqueci de Mencionar que podemos Usar CTE, já que você usa o SQL SERVER, pois podemos aplicar a recursividade.

Abraços,
Responder

16/07/2017

Juarez Cordeiro

Ademir, Noite!

Volto às atividades profissionais amanhã e fiquei muito feliz me respondeu, amanhã vou tentar a sua sugestão e te reporto, Muito Obrigado.

Abraços,
Juarez Cordeiro
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar