Affichage de toutes les données de date entre deux dates, y compris les valeurs nulles
Lorsque vous travaillez avec des données de date, il est courant de rencontrer des scénarios dans lesquels toutes les dates ne sont pas sont représentés dans votre ensemble de données. Cela peut entraîner des lacunes dans votre analyse. Pour résoudre ce problème et afficher toutes les dates dans une plage spécifiée, nous pouvons utiliser une combinaison de techniques.
Considérons le problème suivant :
Nous avons une table nommée @temp avec la structure suivante :
DECLARE @temp TABLE ( ID INT IDENTITY(1,1) NOT NULL, CDate SMALLDATETIME, Val INT )
Le tableau содержит les données du 2 octobre 2012 au 15 octobre 2012. Cependant, nous souhaitez récupérer toutes les dates entre le 1er octobre 2012 et le 15 octobre 2012 et afficher des valeurs nulles pour toutes les dates manquantes.
Une approche pour gérer cela consiste à utiliser une expression de table commune récursive (CTE) avec une table de calendrier pour générer toutes les dates dans la plage spécifiée. Le CTE est défini comme suit :
;WITH d(date) AS ( SELECT CAST('10/01/2012' AS DATETIME), UNION ALL SELECT date + 1 FROM d WHERE date < '10/15/2012' )
Ce CTE génère toutes les dates du 1er octobre 2012 au 15 octobre 2012.
Ensuite, on rejoint le CTE avec la table @temp pour récupérer les valeurs correspondantes pour chaque date, en gérant les dates manquantes à l'aide de la fonction de gestion ISNULL NULL, comme indiqué dans ce qui suit requête :
SELECT t.ID, d.date AS CDate, ISNULL(t.val, 0) AS val FROM d LEFT JOIN temp t ON t.CDate = d.date ORDER BY d.date OPTION (MAXRECURSION 0)
L'OPTION (MAXRECURSION 0) est utilisée pour limiter le nombre de récursions dans le CTE, garantissant que la requête ne s'exécute pas indéfiniment. En définissant ceci sur 0, cela permet une récursivité illimitée.
Cette requête produira le résultat souhaité, affichant toutes les dates entre le 1er octobre 2012 et le 15 octobre 2012, avec des valeurs nulles pour les dates manquantes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!