Calcular a Taxa de Licenciamento dos Bens (Veículos) extraindo o valor mensal entre o período de validade

SQL

23/08/2023

Olá Senhores,
Novamente venho buscar auxílios na criação de uma consulta, não sei se é possível mas vou fazer uma breve explicação:
preciso fazer um rateio mensal, ou seja mês a mês, do valor pago de licenciamento entre o período de DtEmissao e DtValidade.
o resultado dessa consulta seria:
OIDBem,
Identificacao,
Descricao,
Dia/Mes/Ano - obs.:"(data/mes/ano do primeiro dia do mês de cada mês dentro do período DtEmissao e DtValidade)",
valor,
Sendo assim teria que dividir o valor (taxa) mês a mês e armazenar na coluna auxiliar de dia/mes/ano entre os período DtEmissao e Dtvalidade para saber o custo mês a mês de cada veículo da frota
nessa consulta abaixo coloquei um filtro para dois veículos (identificacao) 102 e 75, mas preciso extrair de toda a frota, nela está apresentado os campos:
OIDBem,
Valor,
Descricao,
Periocidade,
Identificacao,
TipoPeriocidade,
DtValidade,
DtEmissao,
-------//--------------
SELECT DISTINCT
e.OIDBem,
ee.Valor,
tee.Descricao,
tee.Periodicidade,
e1.Identificacao,
tee.TipoPeriodicidade,
ee.DtValidade,
ee.DtEmissao

FROM EquipamentoEvento ee
INNER JOIN Equipamento e
ON ee.OIDBem = e.OIDBem
INNER JOIN EquipamentoEvento ee1
ON e.OIDBem = ee1.OIDBem
INNER JOIN TipoEquipamentoEvento tee
ON ee.OIDTipoEquipamentoEvento = tee.OIDTipoEquipamentoEvento
INNER JOIN vEquipamento e1
ON ee.OIDBem = e1.OIDBem
LEFT OUTER JOIN Documento
on e.OIDBem = ee1.OIDBem
WHERE e1.Identificacao IN ('1020','75') and ee.Valor IS NOT NULL AND ee.DtEmissao BETWEEN '2019/01/01' AND GETDATE()
Adriano Anacleto

Adriano Anacleto

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

01/09/2023

está errada a passagem de parâmetros para a função. deveria ser data de emissão e data de validade.

datediff(month, ee.DtEmissao, ee.DtValidade)+1 meses,
round(ee.Valor / (datediff(month, ee.DtEmissao, ee.DtValidade)+1),3) taxa
GOSTEI 1

Mais Respostas

Emerson Nascimento

Emerson Nascimento

23/08/2023

essa consulta é difícil de montar, porque é impossível determinar as colunas.
não conheço teus registros, mas imagino o seguite:

produto   valor   emissao    validade
x         1000    15/01/23   23/08/23
y         800     17/01/23   14/05/23

o resultado, segundo o que você solicitou, seria:
produto   emissao    taxa   coluna1   coluna2   coluna3   coluna4   coluna5   coluna6   coluna7   coluna8
x         15/01/23    125  01/01/23  01/02/23  01/03/23  01/04/23  01/05/23  01/06/23  01/07/23  01/08/23
y         17/01/23    160  01/01/23  01/02/23  01/03/23  01/04/23  01/05/23

como o número de colunas varia, pra não usar PIVOT, talvez possa ser apresentado o número de meses e o valor mensal:
SELECT DISTINCT
	e.OIDBem,
	ee.Valor,
	tee.Descricao,
	tee.Periodicidade,
	e1.Identificacao,
	tee.TipoPeriodicidade,
	ee.DtValidade,
	ee.DtEmissao,
	datediff(month, ee.DtEmissao, ee.DtEmissao)+1 meses,
	round(ee.Valor / (datediff(month, ee.DtEmissao, ee.DtEmissao)+1),3) taxa
FROM
	EquipamentoEvento ee
INNER JOIN Equipamento e
	ON
	ee.OIDBem = e.OIDBem
INNER JOIN EquipamentoEvento ee1
	ON
	e.OIDBem = ee1.OIDBem
INNER JOIN TipoEquipamentoEvento tee
	ON
	ee.OIDTipoEquipamentoEvento = tee.OIDTipoEquipamentoEvento
INNER JOIN vEquipamento e1
	ON
	ee.OIDBem = e1.OIDBem
LEFT OUTER JOIN Documento
	ON
	e.OIDBem = ee1.OIDBem
WHERE
	e1.Identificacao IN ('1020','75') and ee.Valor IS NOT NULL AND ee.DtEmissao BETWEEN '2019/01/01' AND GETDATE()



GOSTEI 0
Adriano Anacleto

Adriano Anacleto

23/08/2023

essa consulta é difícil de montar, porque é impossível determinar as colunas.
não conheço teus registros, mas imagino o seguite:

produto   valor   emissao    validade
x         1000    15/01/23   23/08/23
y         800     17/01/23   14/05/23

o resultado, segundo o que você solicitou, seria:
produto   emissao    taxa   coluna1   coluna2   coluna3   coluna4   coluna5   coluna6   coluna7   coluna8
x         15/01/23    125  01/01/23  01/02/23  01/03/23  01/04/23  01/05/23  01/06/23  01/07/23  01/08/23
y         17/01/23    160  01/01/23  01/02/23  01/03/23  01/04/23  01/05/23

como o número de colunas varia, pra não usar PIVOT, talvez possa ser apresentado o número de meses e o valor mensal:
SELECT DISTINCT
	e.OIDBem,
	ee.Valor,
	tee.Descricao,
	tee.Periodicidade,
	e1.Identificacao,
	tee.TipoPeriodicidade,
	ee.DtValidade,
	ee.DtEmissao,
	datediff(month, ee.DtEmissao, ee.DtEmissao)+1 meses,
	round(ee.Valor / (datediff(month, ee.DtEmissao, ee.DtEmissao)+1),3) taxa
FROM
	EquipamentoEvento ee
INNER JOIN Equipamento e
	ON
	ee.OIDBem = e.OIDBem
INNER JOIN EquipamentoEvento ee1
	ON
	e.OIDBem = ee1.OIDBem
INNER JOIN TipoEquipamentoEvento tee
	ON
	ee.OIDTipoEquipamentoEvento = tee.OIDTipoEquipamentoEvento
INNER JOIN vEquipamento e1
	ON
	ee.OIDBem = e1.OIDBem
LEFT OUTER JOIN Documento
	ON
	e.OIDBem = ee1.OIDBem
WHERE
	e1.Identificacao IN ('1020','75') and ee.Valor IS NOT NULL AND ee.DtEmissao BETWEEN '2019/01/01' AND GETDATE()


Olá Emerson Nascimento,
Agradeço desde já sua atenção em me ajudar. Segue abaixo parte do resultado na consulta, perceba que a coluna meses trouxa apena 1, busquei algumas soluções no seu codigo no entanto não obtive sucesso, caso vc consiga me auxiliar agradeço!


OIDBem Valor Descricao Periodicidade Identificacao TipoPeriodicidade DtValidade DtEmissao meses taxa
FA06E4F36F10 0,00 Cronotacógrafos 706 75 (null) 24/05/2020 00:00:00.000 24/04/2020 00:00:00.000 1 0,0000000000000
3320A8EFD573 129,08 Seguro - Ônibus Fretamento Mês Matriz 1 1020 M 10/08/2020 00:00:00.000 10/08/2019 00:00:00.000 1 129,0800000000000
3320A8EFD573 10,57 DPVAT - Seguro Obrigatório 1 1020 A 31/08/2021 00:00:00.000 31/08/2020 00:00:00.000 1 10,5700000000000
3320A8EFD573 123,53 Taxa de Licenciamento Veicular 1 1020 A 31/08/2021 00:00:00.000 31/08/2020 00:00:00.000 1 123,5300000000000
FA06E4F36F10 37,90 DPVAT - Seguro Obrigatório 1 75 A 30/04/2020 00:00:00.000 30/04/2019 00:00:00.000 1 37,9000000000000
FA06E4F36F10 1250,29 IPVA - Estado de Santa Catarina 1 75 A 30/04/2021 00:00:00.000 30/04/2020 00:00:00.000 1 1250,2900000000000
3320A8EFD573 129,08 Seguro - Ônibus Fretamento Mês Matriz 1 1020 M 10/08/2021 00:00:00.000 10/08/2020 00:00:00.000 1 129,0800000000000
3320A8EFD573 1725,41 Seguro - Ônibus Fretamento Anual Matriz 1 1020 A 10/08/2024 00:00:00.000 10/08/2023 00:00:00.000 1 1725,4100000000000
FA06E4F36F10 128,85 Taxa de Licenciamento Veicular 1 75 A 30/04/2022 00:00:00.000 30/04/2021 00:00:00.000 1 128,8500000000000
3320A8EFD573 142,69 Taxa de Licenciamento Veicular 1 1020 A 31/08/2023 00:00:00.000 31/08/2022 00:00:00.000 1 142,6900000000000
3320A8EFD573 0,00 DPVAT - Seguro Obrigatório 1 1020 A 31/08/2022 00:00:00.000 31/08/2021 00:00:00.000 1 0,0000000000000
FA06E4F36F10 142,69 Taxa de Licenciamento Veicular 1 75 A 30/04/2023 00:00:00.000 30/04/2022 00:00:00.000 1 142,6900000000000
FA06E4F36F10 1288,46 IPVA - Estado de Santa Catarina 1 75 A 30/04/2020 00:00:00.000 30/04/2019 00:00:00.000 1 1288,4600000000000
3320A8EFD573 37,90 DPVAT - Seguro Obrigatório 1 1020 A 31/08/2020 00:00:00.000 31/08/2019 00:00:00.000 1 37,9000000000000
3320A8EFD573 1156,00 IPVA - Estado de Santa Catarina 1 1020 A 31/08/2022 00:00:00.000 31/08/2021 00:00:00.000 1 1156,0000000000000
3320A8EFD573 1630,45 Seguro - Ônibus Fretamento Anual Matriz 1 1020 A 10/08/2023 00:00:00.000 10/08/2022 00:00:00.000 1 1630,4500000000000
3320A8EFD573 1172,31 IPVA - Estado de Santa Catarina 1 1020 A 31/08/2021 00:00:00.000 31/08/2020 00:00:00.000 1 1172,3100000000000
3320A8EFD573 0,00 Cronotacógrafos 706 1020 (null) 25/03/2024 00:00:00.000 01/04/2022 00:00:00.000 1 0,0000000000000
FA06E4F36F10 119,62 Taxa de Licenciamento Veicular 1 75 A 30/04/2020 00:00:00.000 30/04/2019 00:00:00.000 1 119,6200000000000
FA06E4F36F10 129,08 Seguro - Ônibus Fretamento Mês Matriz 1 75 M 10/08/2020 00:00:00.000 10/08/2019 00:00:00.000 1 129,0800000000000
3320A8EFD573 128,85 Taxa de Licenciamento Veicular 1 1020 A 31/08/2022 00:00:00.000 31/08/2021 00:00:00.000 1 128,8500000000000
FA06E4F36F10 0,00 Cronotacógrafos 706 75 (null) 24/04/2022 00:00:00.000 12/05/2020 00:00:00.000 1 0,0000000000000
FA06E4F36F10 0,00 Cronotacógrafos 706 75 (null) 13/04/2024 00:00:00.000 27/04/2022 00:00:00.000 1 0,0000000000000


GOSTEI 0
Adriano Anacleto

Adriano Anacleto

23/08/2023

Olá Emerson Nascimento,
Perfeito! agora rodou conforme esperado!
Grato pelo seus auxílios!
GOSTEI 0
Adriano Anacleto

Adriano Anacleto

23/08/2023

está errada a passagem de parâmetros para a função. deveria ser data de emissão e data de validade.

datediff(month, ee.DtEmissao, ee.DtValidade)+1 meses,
round(ee.Valor / (datediff(month, ee.DtEmissao, ee.DtValidade)+1),3) taxa

Olá Emerson Nascimento,
Perfeito! agora rodou conforme esperado!
Grato pelo seus auxílios!
GOSTEI 0
Adriano Anacleto

Adriano Anacleto

23/08/2023

está errada a passagem de parâmetros para a função. deveria ser data de emissão e data de validade.

datediff(month, ee.DtEmissao, ee.DtValidade)+1 meses,
round(ee.Valor / (datediff(month, ee.DtEmissao, ee.DtValidade)+1),3) taxa

Olá Emerson Nascimento,
Perfeito! agora rodou conforme esperado!
Grato pelo seus auxílios!


Olá Emerson Nascimento,
Como eu faria para apresentar uma coluna com dia/mes/ano entre as datas de Emissão e Validade para que possa fazer uma linha do tempo, preciso carregar essa consulta no Dashboard de BI. A consulta rodou calculou a divisão corretamente, agora precisaria de uma coluna auxiliar que seja apresentado por exemplo as datas de cada mês pode ser como exemplo:
Data Emissão 10/08/2023 com validade 10/08/2024
01/08/2023
01/09/2023
01/10/2023
01/11/2023
01/12/2023
01/01/2024
01/02/2024
01/03/2024
01/04/2024
01/05/2024
01/06/2024
01/07/2024
GOSTEI 0
POSTAR