Vous avez 2 problèmes que vous essayez de résoudre. La première question est de savoir comment combler les lacunes. Le deuxième problème est de remplir le champ Nombre pour les enregistrements manquants.
Problème 1 :ce problème peut être résolu en utilisant une Dates Lookup table
ou en créant une recursive common table expression
. Je recommanderais de créer une table de recherche de dates pour cela si c'est une option. Si vous ne pouvez pas créer une telle table, vous aurez besoin de quelque chose comme ça.
WITH CTE AS (
SELECT MAX(dt) maxdate, MIN(dt) mindate
FROM yourtable
),
RecursiveCTE AS (
SELECT mindate dtfield
FROM CTE
UNION ALL
SELECT DATEADD(day, 1, dtfield)
FROM RecursiveCTE R
JOIN CTE T
ON R.dtfield < T.maxdate
)
Cela devrait vous créer une liste de dates commençant par le MIN
date dans votre tableau et se terminant par le MAX
.
Problème 2 :Voici où se trouve une correlated subquery
serait utile (autant que je reste généralement loin d'eux) pour obtenir le dernier cnt de votre table d'origine :
SELECT r.dtfield,
(SELECT TOP 1 cnt
FROM yourtable
WHERE dt <= r.dtfield
ORDER BY dt DESC) cnt
FROM RecursiveCTE r