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

Langage SQL Discussion :

Recherche de clients acheteurs sur deux périodes


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 56
    Par défaut Recherche de clients acheteurs sur deux périodes
    bonjour,

    Je rencontre un soucis , pour faire un comparatif de client acheteur / mois sur une période donnée (année en cours (N) ) et la sur la même période donnée à N-1

    j'utilise une jointure de table pour avoir les raisons social des entreprises et autres info via PHP comme ceci

    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
     
    $sql="SELECT
    clients.compte,
    clients.raison,
    clients.secteur,
    clients.cp,
    clients.ville,
    sum(commande.montant) as total,
    clients.orsy
    FROM clients
    JOIN commande
    ON clients.compte=commande.compte
    WHERE clients.compte !=''
    AND commande.commande>='$annee-01-01'
    AND commande.commande<='$annee-$mois-31'
    GROUP BY clients.compte
    ORDER BY total DESC";
    les variables $annee et $mois correspond à la période étudier

    puis pour avoir la comparaison a l'année précédente j'utilise la variable $ann2 ( $annee-1 ) j'ai donc cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        $sql2="
        SELECT sum(montant)
        FROM commande
        WHERE commande
        AND commande.commande>='$ann2-01-01'
        AND commande.commande<='$ann2-$mois-31'
        AND compte='$lgn[0]'";
    la variable $lgn[0] me retourne le compte client depuis la première requête SQL

    Donc si sur l'année en cours les clients acheteurs sont supérieurs et compris dans l'année précédente ça fonctionne bien

    actuellement j'ai le soucis suivant : (travail que du mois de janvier )
    année 2012 : 35 clients acheteurs
    année 2011 : 45 clients acheteurs
    en prime il a des clients acheteurs qui ne sont pas commun aux 2 périodes.

    donc comment pouvoir extraire les comptes clients commun ou pas, entre les 2 périodes de comparaison et générer le top CA de l'année en cours ....

    J’espère avoir être clair et merci de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 56
    Par défaut
    Re,

    J'ai donc préféré reprendre ma requête à zéro avec une union comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    (SELECT compte, sum(montant) as maint 
    FROM commande 
    WHERE commande BETWEEN ADDDATE('2012-09-1', INTERVAL -11 MONTH) AND LAST_DAY('2012-09-01') 
    GROUP BY compte
    )
    UNION 
    (SELECT compte, sum(montant) as prece 
    FROM commande 
    WHERE commande BETWEEN ADDDATE('2011-09-1', INTERVAL -11 MONTH) AND LAST_DAY('2011-09-01') 
    GROUP BY compte)
    ORDER BY maint DESC
    ça répond mieux à ce que je cherche a faire. A 1 détail près : j'ai des doublons, or logiquement UNION supprime les doublons ??

    voici un exemple de retour de la requête
    compte maint
    259534 7541.42
    256976 6357.70
    259534 5416.04
    256976 5291.16
    255151 5246.61
    184916 4808.75
    258631 4534.45
    234276 4373.64
    29165 4114.10
    J'ai bien par exemple pour le compte 259534 un CA de 7541.42 sur la 1er ligne et à la ligne 3 on voit le CA à N-1 de 5416.04

    et il possible de pouvoir le CA a N-1 dans une 3ieme colonne ??

    Merci d'avance de votre aide

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Techniquement Il n'y a pas de doublon, en plus fonctionnellement il ne faut pas supprimer les doublons, au cas où un compte fasse exactement le même CA sur 2 années.
    Pour avoir 2 colonnes il faut filtrer sur l'ensemble des 2 années et conditionner l'affichage des 2 sommes en foncion de l'année :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT compte, 
           sum(case when commande BETWEEN ADDDATE('2011-09-01', INTERVAL -11 MONTH) AND LAST_DAY('2011-09-01') then montant end) AS maint_N_1,
           sum(case when commande BETWEEN ADDDATE('2012-09-01', INTERVAL -11 MONTH) AND LAST_DAY('2012-09-01') then montant end) AS maint_N
      FROM commande 
     WHERE commande BETWEEN ADDDATE('2011-09-01', INTERVAL -11 MONTH) AND LAST_DAY('2012-09-01') 
     GROUP BY compte

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 56
    Par défaut
    Ca répond tout à fais à ce que je veux faire.

    Merci de ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Java RMI Client-Serveur sur deux machines différentes
    Par chercheur111 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 10/12/2014, 17h44
  2. Réponses: 5
    Dernier message: 06/11/2012, 17h05
  3. Faire une recherche de type "contient" sur deux colonnes
    Par Sango64 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/08/2011, 10h20
  4. Réponses: 4
    Dernier message: 01/10/2010, 11h03
  5. recherche multicritères sur deux tables
    Par amélie22 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 11h59

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