Apresentar histórico em data em Colunas de meses

Banco de Dados

01/07/2017

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

Curtidas 0

Respostas

Fabiano Carvalho

Fabiano Carvalho

01/07/2017

Qual o banco de dados?
Voce pode fazer utilizar pivot!
GOSTEI 0
Juarez Cordeiro

Juarez Cordeiro

01/07/2017

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.
GOSTEI 0
Juarez Cordeiro

Juarez Cordeiro

01/07/2017

Pessoal, Bom Dia!

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

Obrigado,
GOSTEI 0
Lincon Silva

Lincon Silva

01/07/2017

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
GOSTEI 0
Lincon Silva

Lincon Silva

01/07/2017

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

Abraços,
GOSTEI 0
Juarez Cordeiro

Juarez Cordeiro

01/07/2017

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
GOSTEI 0
POSTAR