Usuário com melhor resposta
Meses faltantes na tabela de clientes

Pergunta
-
Bom dia pessoal,
Tenho uma dúvida sobre meses faltantes dentro de uma tabela de clientes. O meu cenário consiste em clientes que aparecem na minha tabela mensalmente, porém alguns aparecem com gaps como o exemplo abaixo.
customer months Cliente 1 01/06/2017 Cliente 1 01/08/2017 Cliente 1 01/09/2017 Cliente 1 01/10/2017 Cliente 1 01/11/2017 Reparem que o cliente 1 aparece no mês 06 até o mês 11. Porém na base ele não aparece no mês 07.
Eu precisaria inserir uma linha para o cliente 1 com a data 01/07/2017 mas sem utilizar CTEs.
Obrigado desde já! Abs
Respostas
-
Deleted
- Marcado como Resposta Junior Oslain segunda-feira, 19 de fevereiro de 2018 17:38
Todas as Respostas
-
Qual é a sua duvida: Como inserir uma linha ou como detectar gaps?
Att
William John Adam Trindade
Analyste-programmeur
Sogi Informatique ltée
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta". -
-
E a data é sempre fixa? Digo, voce guarda somente o dia primeiro de cada mes?
Att
William John Adam Trindade
Analyste-programmeur
Sogi Informatique ltée
If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer". Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta". -
Deleted
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 16 de fevereiro de 2018 11:55
- Não Sugerido como Resposta Junior Oslain sexta-feira, 16 de fevereiro de 2018 12:00
-
-
Eu precisaria inserir uma linha para o cliente 1 com a data 01/07/2017 mas sem utilizar CTEs.
Obrigado desde já! Abs
Boa tarde , Isso seria facilmente resolvido usando CTEs recursivas, ,fora essa solução eu só vejo como saida
usar cursor , que vai te dar o mesmo resultado ,porem de forma mais lenta dependendo do tamanho da tabela ,
por que a limitação de não usar CTEs ??
Wesley Neves - Brasilia-DFhttps://wesleyneves.wordpress.com/
SELECT Tab.[that's me:]
FROM
(
VALUES
('Wesley Neves'),
('Analista.NET'),
('Pós Graduando em Banco de Dados com ênfase em BI'),
('MTA -SQL Server'),
('MTA -Web Developed')
) AS Tab ("that's me:");
"Se a resposta for útil ou ajudar ,não esqueça de marcar"
Wesley Neves
-
Cara, era BlZ?
1 - Você precisa de uma tabela, com as datas possíveis, o ideal é você já ter uma tabela assim para trabalhar sempre que precisar de algo parecido, dá uma olhada na que eu trabalho:
Com uma tabela assim, você da um distinct sempre que precisar.
2 - Com uma tabela assim, você cria uma outra tabela com os todos os clientes / Meses distintos, algo como:
select distinct a.customer, b. mes
into #cliente_mes
from TABELA_CLIENTES a
join MESES_POSSIVEIS b
on A.MES = B.MES
3 - A partir dessa tabela, você pode fazer a consulta:
select a.customer
,a.mes
,qtde_vendas = isnull(b.qtde_vendas ,0) --- Exemplo
from #cliente_mes a
left join TABELA_CLIENTES b
on a.customer = b.customer
and a.mes = b.mes
Sobre deixar AAAMM é simples:
convert(varchar(6), min( getdate() ), 112 ) -- Substitui getdate() pelo campo de data da tabela
-
Deleted
- Marcado como Resposta Junior Oslain segunda-feira, 19 de fevereiro de 2018 17:38
-
Oi Johnny , tudo bem e você?
Primeiramente muito obrigado por dedicar parte do seu tempo na minha questão. Valeu mesmo!
Eu uso muito este recurso que você explicou acima e funciona bem. Porém neste caso , eu não posso atribuir todas as possibilidades de meses para todos os clientes , pois eu estaria considerando que estes , estariam presentes em todos os períodos possíveis e não seria verdade. Baseado na data mínima e máxima , eu preciso preencher os gaps respeitando este intervalo e ai assim eu garantiria a presença dos clientes quando eles realmente apareceram...
Muito obrigado!
Abs
-
-
José, eu acabei conseguindo usar CTE(estava com problemas técnicos) e agora estou usando uma versão do SQL mais atualizada também.
A boa notícia é que funcionou! A sua lógica me atendeu e agora eu consigo preencher os gaps e seguir com o meu processo sem este problema.
Muito obrigado pela a ajuda, tirou um grande obstáculo!
Abs
Junior
-
-
-
-