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 et Mois 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 !