Génération d'une plage de dates complète avec des données renseignées
Dans une base de données, il est souvent nécessaire de récupérer des données dans une plage de dates spécifique. Toutefois, lorsque des données sont manquantes pour certaines dates, il peut être utile d'afficher des zéros au lieu de laisser les colonnes vides. Cela garantit que toute la plage de dates est représentée, offrant une vue plus complète des données.
Problème :
Vous disposez d'un tableau contenant des données de date et de valeur et vous avez besoin pour récupérer toutes les dates dans une plage spécifiée. S'il n'y a pas de ligne pour une date particulière, vous souhaitez afficher zéro pour toutes les colonnes.
Solution :
Ceci peut être réalisé en créant un ensemble de dates en utilisant une expression de table commune récursive (CTE), puis en effectuant une jointure gauche avec la table de données existante. Le CTE génère une série de dates dans la plage spécifiée. La jointure de gauche fait correspondre les dates générées avec les lignes existantes, en remplissant toutes les valeurs manquantes avec des zéros à l'aide de la fonction ISNULL().
;with d(date) as ( select cast('10/01/2012' as datetime) union all select date+1 from d where date < '10/15/2012' ) select t.ID, d.date CDate, isnull(t.val, 0) val from d left join temp t on t.CDate = d.date order by d.date OPTION (MAXRECURSION 0)
L'option MAXRECURSION spécifie le nombre maximum d'itérations récursives autorisées. Dans ce cas, comme la plage de dates est petite (15 jours), nous pouvons la définir sur 0 pour permettre des itérations illimitées.
En exécutant cette requête, vous obtiendrez un ensemble de données complet qui inclut toutes les dates comprises dans la période spécifiée. gamme. Toutes les dates manquantes seront remplies de zéros, fournissant une représentation complète des données.
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!