IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Sélection de ventes groupée par semaine


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut Sélection de ventes groupée par semaine
    Bonjour à toute la communauté,
    Je viens solliciter votre aide pour un souci que j'ai.
    Je veux sélectionner dans une table de vente, les informations de performance et les comparer par jour, semaine, et Mois.
    Pour la semaine, je voudrais Comparer les informations des trois dernière semaines par exemple. Donc je veux que le système m'affiche par exemple :
    Pour les Semaines :
    Du 13 au 19 Semaine 1 : 2000 Euros
    Du 20 au 26 Semaine 2: 1000 Euros
    Du 27 au 02 Semaine 3 : 2000 Euros


    Pour les Mois

    Août 2014 : 5000 Euros
    Sept 2014 : 4000 Euros
    Octobre 2014 : 5000 Euros

    Est ce que c'est faisable, si oui, veuillez m'aider SVP.
    Voici ce que j'ai pu faire pour les jours et qui marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    USE [P2014]
    GO
    /****** Object:  StoredProcedure [VENTE].[COMPARAISON_STATISTIQUE_BY_JOUR]    Script Date: 21/05/2014 08:46:43 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
      ALTER PROCEDURE [VENTE].[COMPARAISON_STATISTIQUE_BY_JOUR]
      @Nbrejour int,
      @DateStart Datetime
     
      AS
      SET NOCOUNT ON
     
      SET NOCOUNT ON
       SELECT 
       DATENAME(dw,convert(date,[LC].[DATEPIECE],101))JourSemaine,sum([SLC].[NETAPAYER])Montant
     
      FROM [VENTE].[LIVRAISON_CLIENT] LC
      INNER JOIN [MODELE].[CLIENT] C
      ON [LC].[ID_CLIENT] = [C].[ID_AUTO]
      INNER JOIN [MODELE].[DEPOT_STOCKAGE] DS
      ON [LC].[ID_DEPOT] = [DS].[ID_AUTO]
      INNER JOIN [MODELE].[REPRESENTANT] REP
      ON [LC].[ID_VENDEUR] = [REP].[ID_AUTO]
      INNER JOIN [VENTE].[SUITE_LIVRAISON_CLITS] SLC
      ON [SLC].[ID_BLIVRAISON_CLITS] = [LC].[ID_AUTO]
      INNER JOIN [MODELE].[SOCIETE] SOC
      ON [LC].[ID_SOCIETE] = [SOC].[ID_AUTO]
      WHERE 
      convert(date,[LC].[DATEPIECE],101) between convert(date,@DateStart-(@Nbrejour-1),101) and  convert(date,@DateStart,101)  and [LC].[IS_CANCEL] = 'false' and [LC].[IS_VALIDER] = 'true'
      GROUP BY convert(date,[LC].[DATEPIECE],101)

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Vous n'avez pas respecté la charte de postage il est donc difficile de vous répondre directement. http://www.developpez.net/forums/d96...vement-poster/

    le principe est de calculer des agrégats via les fonctions de fenêtrage.
    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT JOUR, SUM(VENTE) OVER(PARTITION BY JOUR) AS TOTAL_JOUR,
                 SUM(VENTE) OVER(PARTITION BY YEAR(JOUR), DATEPART(isowk, JOUR)) AS TOTAL_SEMAINE,
                 SUM(VENTE) OVER(PARTITION BY YEAR(JOUR), MONTH(JOUR)) AS TOTAL_MOIS
    FROM   MA_TABLE;
    À me lire sur les fonctions de fenêtrage : http://sqlpro.developpez.com/article...clause-window/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Merci M. Frederic,
    Je m'excuse pour le non respect des règles de postage. J'en prendrai connaissance et reposter correctement. Aussi en attendant, je vais tester votre apport et vous revenir.
    Merci beaucoup

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Salut à toute la Communauté,
    Mon souci est de Grouper et comparer par période (Jour, Semaine, Mois, Année), les résultats de la ma table de Vente de manière à comparer par exemple, les ventes des 3 dernières Semaines, des 3 derniers Mois ou des trois dernières Années.
    J'ai pu obtenu avec ma requête que voici le résultat comparé des 3 derniers jours à partir de ma DateStart.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    USE [P2014]
    GO
    /****** Object:  StoredProcedure [VENTE].[COMPARAISON_STATISTIQUE_BY_JOUR]    Script Date: 21/05/2014 15:04:07 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
     
      ALTER PROCEDURE [VENTE].[COMPARAISON_STATISTIQUE_BY_JOUR]
      @Nbrejour int,
      @DateStart Datetime
     
      AS
      SET NOCOUNT ON
     
      SET NOCOUNT ON
       SELECT 
       DATENAME(dw,convert(date,[LC].[DATEPIECE],101))JourSemaine,sum([SLC].[NETAPAYER])Montant
     
      FROM [VENTE].[LIVRAISON_CLIENT] LC
      INNER JOIN [MODELE].[CLIENT] C
      ON [LC].[ID_CLIENT] = [C].[ID_AUTO]
      INNER JOIN [MODELE].[DEPOT_STOCKAGE] DS
      ON [LC].[ID_DEPOT] = [DS].[ID_AUTO]
      INNER JOIN [MODELE].[REPRESENTANT] REP
      ON [LC].[ID_VENDEUR] = [REP].[ID_AUTO]
      INNER JOIN [VENTE].[SUITE_LIVRAISON_CLITS] SLC
      ON [SLC].[ID_BLIVRAISON_CLITS] = [LC].[ID_AUTO]
      INNER JOIN [MODELE].[SOCIETE] SOC
      ON [LC].[ID_SOCIETE] = [SOC].[ID_AUTO]
      WHERE 
      convert(date,[LC].[DATEPIECE],101) between convert(date,@DateStart-(@Nbrejour-1),101) and  convert(date,@DateStart,101)  and [LC].[IS_CANCEL] = 'false' and [LC].[IS_VALIDER] = 'true'
      GROUP BY convert(date,[LC].[DATEPIECE],101) 
      --[LC].[ID_DEPOT] = @Id_Depot and [LC].[DATECREATION] between  @DateVente and DATEADD(d,1,@DateVente) and [LC].[ID_VENDEUR] = @Id_Vendeur
    L'apport de M. Frederic que j'ai exécuté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
      SELECT [LC].[DATEPIECE] JOUR, sum([SLC].[NETAPAYER]) OVER(PARTITION BY [LC].[DATEPIECE]) AS TOTAL_JOUR,
                 sum([SLC].[NETAPAYER]) OVER(PARTITION BY YEAR([LC].[DATEPIECE]), DATEPART(isowk, [LC].[DATEPIECE])) AS TOTAL_SEMAINE,
                 sum([SLC].[NETAPAYER]) OVER(PARTITION BY YEAR([LC].[DATEPIECE]), MONTH([LC].[DATEPIECE])) AS TOTAL_MOIS
     FROM [VENTE].[LIVRAISON_CLIENT] LC
      INNER JOIN [MODELE].[CLIENT] C
      ON [LC].[ID_CLIENT] = [C].[ID_AUTO]
      INNER JOIN [MODELE].[DEPOT_STOCKAGE] DS
      ON [LC].[ID_DEPOT] = [DS].[ID_AUTO]
      INNER JOIN [MODELE].[REPRESENTANT] REP
      ON [LC].[ID_VENDEUR] = [REP].[ID_AUTO]
      INNER JOIN [VENTE].[SUITE_LIVRAISON_CLITS] SLC
      ON [SLC].[ID_BLIVRAISON_CLITS] = [LC].[ID_AUTO]
      INNER JOIN [MODELE].[SOCIETE] SOC
      ON [LC].[ID_SOCIETE] = [SOC].[ID_AUTO]
    le résultat me permet d'objet un total par jour, semaine et mois. Mais ce que je veux réellement, pouvoir comparer les résultats de plusieurs jours, semaine, mois ou Année.
    Merci bocou

  5. #5
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Quel sont les critères permettant de choisir les Jours ,mois ou années à Comparer ?
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Merci,
    Les critères sont :
    @NbreINT qui détermine, le nombre de jour, mois, ou année qu'onveut comparer.

    @DateStart : La date encours (Getdate())

    Par Exemple :
    Si je veux comparer les résultats des 3 derniers mois à savoir, Août, Septembre OCtobre 2014:
    @NbreINT prendra la valeur : 3
    et
    @DateStart prendra la datetime courant

  7. #7
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Un comparaison c'est entre 2 éléments non Trois ou plus

    Dans ton Exemple

    Par Exemple :
    Si je veux comparer les résultats des 3 derniers mois à savoir, Août, Septembre OCtobre 2014:
    @NbreINT prendra la valeur : 3
    et
    @DateStart prendra la datetime courant
    Quel mois servira de base la comparaison ? ou Est-ce que tu souhaite comparer Octobre avec Septembre et Septembre avec Aout etc. ce qui reviens à comparé M avec M-1 ?
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Merci,
    Au fait j'ai juste utilisé comparaison comme un thème.Le résultat de ma requete permettra de suivre l'évolution des ventes sur une période données et de savoir si les ventes on progressé ou pas. Pour celà, il faut forcément utiliser les mêmes définitions pour les périodes choisies. Par Exemple, si c'est pour les 3 derniers mois alors qu'on est au 03 Novembre ce jour. La requete sortira

    du 1er au 3 Août
    du 1er au 3 Septembre
    du 1er au 3 Octobre
    groupé par produit

    Merci de m'aider

  9. #9
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par eddyphan Voir le message
    Par Exemple, si c'est pour les 3 derniers mois alors qu'on est au 03 Novembre ce jour. La requete sortira

    du 1er au 3 Août
    du 1er au 3 Septembre
    du 1er au 3 Octobre
    groupé par produit

    Merci de m'aider
    En fait, c'est plutôt :

    du 3 Août au 3 Septembre
    du 3 Septembre au 3 Octobre
    du 3 Octobre au 3 Novembre
    Non ?

    Parce que sinon, ça n'a pas beaucoup d'intérêt de regarder les ventes juste pour les premiers jours de chaque mois...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par pcaboche Voir le message
    En fait, c'est plutôt :

    du 3 Août au 3 Septembre
    du 3 Septembre au 3 Octobre
    du 3 Octobre au 3 Novembre
    Non ?

    Parce que sinon, ça n'a pas beaucoup d'intérêt de regarder les ventes juste pour les premiers jours de chaque mois...
    non, ce n'est qu'un exemple.
    ça peut bien être
    du 1 Août au 15 Août
    du 1 Septembre au 15 Septembre
    du 1 Octobre au 15 Octobre

    Au fait ce que je veux, c'est juste voir les évolution par période, ça peut par semaine, jour, mois et Année
    Merci

  11. #11
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Bonjour,

    Je reviens de ma pause déjeuner...

    Vu que tu écris une procédure stockée, voilà ce que tu peux faire :

    - tu déclares une variable de table @Periods qui va contenir les différentes périodes qui t'intéressent
    Tu remplis cette table programmatiquement (comme ça tu peux configurer les périodes comme tu veux)

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PeriodId | DateFrom     | DateTo
    1,         "2014-08-01", "2014-08-15"
    2,         "2014-09-01", "2014-09-15"
    3,         "2014-10-01", "2014-10-15"
    - tu fais une jointure entre cette table @Periods, la table de ventes (celles qui tombent entre les dates DateFrom et DateTo) puis tu fais les autres jointures et GROUP BY qui vont bien


    - enfin, c'est une histoire d'affichage.

    Si tu veux juste les ventes globales par période, tu peux simplement afficher le résultat obtenu à l'étape précédente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    PeriodId | DateFrom     | DateTo      | TotalSales
    1,         "2014-08-01", "2014-08-15", 1000
    2,         "2014-09-01", "2014-09-15", 2000
    3,         "2014-10-01", "2014-10-15", 3000
    Après, si tu veux l'évolution des ventes par famille de produits et par période, soit tu peux lire les résultats ligne par ligne, soit tu peux fait un PIVOT pour que ce soit plus lisible

    (ok, c'était pas la question, mais c'est typiquement le genre de truc qu'on pourrait te demander par la suite)


    Sinon, pour ce genre de problème (total des ventes sur différentes périodes), tu devrais regarder du côté des techniques utilisés en Business Intelligence. Parce que ce que tu veux faire, ça ressemble beaucoup à du ROLAP (Relational OLAP) et tu gagnerais sans doute à faire du MOLAP (Multidimensional OLAP) surtout au niveau performances.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Vous n'avez pas respecté la charte de postage il est donc difficile de vous répondre directement. http://www.developpez.net/forums/d96...vement-poster/

    le principe est de calculer des agrégats via les fonctions de fenêtrage.
    Quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT JOUR, SUM(VENTE) OVER(PARTITION BY JOUR) AS TOTAL_JOUR,
                 SUM(VENTE) OVER(PARTITION BY YEAR(JOUR), DATEPART(isowk, JOUR)) AS TOTAL_SEMAINE,
                 SUM(VENTE) OVER(PARTITION BY YEAR(JOUR), MONTH(JOUR)) AS TOTAL_MOIS
    FROM   MA_TABLE;
    À me lire sur les fonctions de fenêtrage : http://sqlpro.developpez.com/article...clause-window/

    A +
    Merci pcaboche,
    Je ne vois que vous avez compris l'esprit mais ne puis-je pas l'obtenir sans créer les deux tables par une procédure comme ci dessus que M. Frederic m'a apporté? Est ce que je ne peux pas à partir de deux variable, dateA et DateB (la période) et un autre variable @NbreInt qui délimite si c'est sur les 2, 3 ou 4 (derniers jours, semaine,mois ou année) utiliser la procédure de M. Frederic pour obtenir le résultat?

  13. #13
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par eddyphan Voir le message
    Merci pcaboche,
    Je ne vois que vous avez compris l'esprit mais ne puis-je pas l'obtenir sans créer les deux tables par une procédure comme ci dessus que M. Frederic m'a apporté?
    Oui, en théorie c'est possible (avec des SUM, CASE WHEN, DATEADD, DATEPART...).

    Par contre, il y a plusieurs problème :

    1. je ne comprends pas votre logique de partitionnement. Je la trouve complexe et sans intérêt (les ventes à la fin du mois, on s'en fout ? C'est vachement pratique pour analyser les ventes au moment de Noël ! )

    2. votre logique de partitionnement (que je trouve absurde), au lieu de la coder séparément (et d'utiliser une variable @Periods comme je le préconise), vous allez devoir la coder au sein de la requête elle-même

    Juste pour vous donner une petite idée de l'absurdité de la chose, voici ce à quoi risque de ressembler votre code (bonne chance pour maintenir une telle abomination !) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    SELECT
        SUM(
            CASE WHEN 
            (
                    @NbreInt = 1 
                AND DATEADD(day, -???, ???) < Jour
                AND Jour < DATEADD(day, -???, ???)
            )
            OR 
            (
                    @NbreInt = 2 
                AND DATEADD(week, -???, ???) < Jour
                AND Jour < DATEADD(week, -???, ???)
            )
            OR 
            (
                    @NbreInt = 3
                AND DATEADD(month, -???, ???) < Jour
                AND Jour < DATEADD(month, -???, ???)
            )
            OR 
            (
                    @NbreInt = 4
                AND DATEADD(year, -???, ???) < Jour
                AND Jour < DATEADD(year, -???, ???)
            )
            THEN Vente
            ELSE 0
            END
        )
            AS Periode1,
     
        SUM(
            CASE WHEN ...
        )
            AS Periode2,...
    FROM 
    ...
    WHERE 
        (
                @NbreInt = 1
            AND ??? < Jour
            AND Jour < ???
        )
        OR ...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  14. #14
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Houm, ça à l'air vraiment compliqué pour moi.

  15. #15
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par pcaboche Voir le message
    1. je ne comprends pas votre logique de partitionnement. Je la trouve complexe et sans intérêt (les ventes à la fin du mois, on s'en fout ? C'est vachement pratique pour analyser les ventes au moment de Noël ! )
    C'est (apparemment) une pratique courante dans le secteur de la distribution de comparer les ventes de périodes précises. Je travaille pour une chaîne de magasin (qui vise le haut de gamme) et je vois régulièrement le même genre d'analyse. Par contre, je suis bien content que ce ne soit pas qui doivent créer ces rapports ^^.

    Bref, tout ça pour dire ça doit être une logique de commercial car en tant qu'informaticien, je n'y trouve pas un grand intérêt non plus.
    Kropernic

  16. #16
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    C'est (apparemment) une pratique courante dans le secteur de la distribution de comparer les ventes de périodes précises. Je travaille pour une chaîne de magasin (qui vise le haut de gamme) et je vois régulièrement le même genre d'analyse. Par contre, je suis bien content que ce ne soit pas qui doivent créer ces rapports ^^.

    Bref, tout ça pour dire ça doit être une logique de commercial car en tant qu'informaticien, je n'y trouve pas un grand intérêt non plus.
    C'est pour cela que je préconise de séparer :
    - le calcul des périodes (pour satisfaire les demandes plus ou moins bizarres des commerciaux)
    - l'extraction des chiffres de ventes proprement dits

    Comme ça c'est plus modulable et plus facile a maintenir.

    Mais non, il y a des gens pour vouloir mélanger les 2 et quand on leur montre que ça risque d'être absolument imbuvable, ils répondent "oh, c'est trop compliqué" (sans déconner ? )

    Il y a des jours, j'ai peur pour l'avenir de l'humanité...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 193
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par pcaboche Voir le message
    C'est pour cela que je préconise de séparer :
    - le calcul des périodes (pour satisfaire les demandes plus ou moins bizarres des commerciaux)
    - l'extraction des chiffres de ventes proprement dits
    Merci pour l'apport de tout le monde. M. PCABOCHE,
    je suis entrain de tester votre méthode, j'attends une suite pour vous informer.
    Voici en excel, le résultat que je voudrais avoir de la requête.

    Nom : TABLEAU.png
Affichages : 467
Taille : 153,0 Ko

  18. #18
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Je me permet de Ré-intervenir dans cette discutions.

    Pourquoi n'utiliser vous pas des technos Microsoft comme SSAS ou peux être plus adapté à votre cas PowerPivot qui est un adon Excel qui vous permettrais de mettre en place un KPI (indicateur clés de performance) basé sur des périodes parallèles ?
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

Discussions similaires

  1. Sélection top 5 groupe par chaque famille
    Par eddyphan dans le forum Développement
    Réponses: 7
    Dernier message: 21/06/2015, 16h18
  2. Requête SQL avec Group By par semaine
    Par SOPSOU dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/07/2013, 22h20
  3. [2008R2] Groupe par rapport à une liste de sélection
    Par colonel.klink dans le forum SSRS
    Réponses: 2
    Dernier message: 28/12/2011, 15h26
  4. Requête DateTime sur une semaine groupée par jour et par heure
    Par cerealkiller dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/08/2011, 15h54
  5. [CR]grouper des dates par semaines, mais semaines FR !
    Par neo.51 dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 18/05/2004, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo