Requête SQL pour Comparer les Ventes de Produits par Mois : Un Guide
Lorsqu’il s’agit de gérer des données de ventes de produits, avoir une compréhension claire de la manière de comparer les chiffres de vente mensuels d’une année à l’autre est crucial pour des rapports efficaces. Que vous gériez un magasin de détail ou que vous analysiez des données de vente pour une entité corporative, être capable d’identifier rapidement les tendances de vente peut fournir des informations inestimables. Dans cet article, nous allons explorer comment construire une requête SQL pour comparer les ventes de produits par mois sur deux années consécutives, tout en veillant à ce que les mois sans ventes soient clairement affichés.
Comprendre le Problème
Vous pourriez être confronté à un scénario où vous avez un ensemble de données structuré comme ceci :
Catégorie | Recettes | Année | Mois
Vélos | 10,000 | 2008 | 1
Vélos | 12,000 | 2008 | 2
Vélos | 12,000 | 2008 | 3
Vélos | 15,000 | 2008 | 4
Vélos | 11,000 | 2007 | 2
Vélos | 11,500 | 2007 | 3
Vélos | 15,400 | 2007 | 4
À partir de cet ensemble de données, vous souhaitez générer un rapport qui compare les recettes générées de janvier à décembre pour les années 2007 et 2008. L’objectif est de remplir les mois sans ventes avec un ‘0’ dans les deux colonnes, créant ainsi un paysage comparatif plus clair pour la prise de décision.
La sortie désirée pourrait ressembler à ceci :
Catégorie | Mois | Rec. Cette Année | Rec. Dernière Année
Vélos | 1 | 10,000 | 0
Vélos | 2 | 12,000 | 11,000
Vélos | 3 | 12,000 | 11,500
Vélos | 4 | 0 | 15,400
Construction de la Requête SQL
Pour y parvenir, nous allons utiliser l’instruction CASE
puissante de SQL en combinaison avec les fonctions d’agrégation appropriées. Nous devrons également établir une table auxiliaire qui inclut tous les mois pour lesquels nous souhaitons des données de vente, même lorsque aucune vente n’est enregistrée.
Étape 1 : Mise en Place de Vos Tables
Vous devez disposer des tables suivantes :
- Table des ventes : Contient des données sur les catégories, les recettes, les années et les mois.
- Table du temps (tm) : Elle contient toutes les combinaisons possibles d’années et de mois sur lesquelles vous souhaitez établir un rapport.
Étape 2 : Structure de Requête de Base
Voici une requête SQL simplifiée pour récupérer les ventes de produits sans lignes vides :
SELECT
Catégorie,
Mois,
SUM(CASE WHEN ANNÉE = 2008 THEN Recettes ELSE 0 END) AS Rec_Cette_Année,
SUM(CASE WHEN ANNÉE = 2007 THEN Recettes ELSE 0 END) AS Rec_Dernière_Année
FROM
ventes
WHERE
ANNÉE IN (2008, 2007)
GROUP BY
Catégorie,
Mois
ORDER BY
Mois;
Explication :
- SUM avec CASE : Cela additionne les recettes pour chaque année en fonction des conditions spécifiées - permettant de différencier les deux années.
- Regroupement : Les résultats sont organisés par
Catégorie
etMois
pour plus de clarté.
Étape 3 : Inclusion des Lignes Vides
Si vous souhaitez inclure les mois sans ventes, la requête doit être ajustée pour garantir qu’elle récupère à la fois les données de ventes
et de la table tm
. Voici comment :
SELECT
fill.Catégorie,
fill.Mois,
SUM(CASE WHEN ANNÉE = 2008 THEN Recettes ELSE 0 END) AS Rec_Cette_Année,
SUM(CASE WHEN ANNÉE = 2007 THEN Recettes ELSE 0 END) AS Rec_Dernière_Année
FROM
ventes
RIGHT JOIN (SELECT DISTINCT Catégorie, Année, Mois FROM ventes CROSS JOIN tm) AS fill
ON fill.Catégorie = ventes.Catégorie AND fill.Année IN (2008, 2007)
GROUP BY
fill.Catégorie,
fill.Mois
ORDER BY
fill.Mois;
Explication :
- RIGHT JOIN : Cela garantit que tous les mois de la table
tm
sont inclus, même ceux sans données de ventes. - Regroupement et Ordonnancement : Maintenir le même regroupement et ordonnancement aide à établir un rapport clair.
Conclusion
En utilisant les techniques démontrées dans cet article, vous serez capable de générer efficacement un rapport comparant les ventes de produits par mois au cours de différentes années, même en tenant compte des ventes nulles. Cette approche non seulement aide dans l’analyse complète des données, mais améliore également les capacités de reporting globales.
Pour des lectures supplémentaires et des fonctionnalités avancées, envisagez d’examiner des ressources supplémentaires sur l’utilisation des instructions CASE
et PIVOT
dans SQL Server 2005 pour des besoins de reporting plus complexes. Bonnes requêtes !