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

Requêtes et SQL. Discussion :

Sélection aléatoire d'un commercial de l'agence pour chaque client


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Sélection aléatoire d'un commercial de l'agence pour chaque client
    Bonsoir à tous,

    Je débute sur Access , et je suis confronté au problème suivant. Merci pour votre aide !

    Je dois affecter, aléatoirement, les clients de plusieurs agences aux commerciaux de ces agences.

    J'ai deux tables :
    1) table1 : contient, pour chaque num_client, le code_agence
    2) table2 : contient, pour chaque code_agence, les code_commercial (de 2 à 5 codes par agence)
    Je voudrais attribuer aléatoirement, à chaque num_client, un code_commercial de son agence de rattachement

    Par exemple :
    table1 :
    num_client | code_agence
    numclien25 | AGENCE_ZA
    numclien26 | AGENCE_YB
    numclien27 | AGENCE_YB
    numclien28 | AGENCE_YB
    numclien29 | AGENCE_ZA

    table2
    code_agence | code_commercial
    AGENCE_ZA | CCDUPONT
    AGENCE_ZA | CCMARTIN
    AGENCE_ZA | CCBOUYER
    AGENCE_YB | CCYANG
    AGENCE_YB | CCSALAMO

    Actuellement, soit je double ou triple les lignes en sélectionnant, pour chaque num_client, tous les codes commerciaux de l'agence ; soit je sélectionne toujours le même code commercial par agence, de telle sorte que certains codes commerciaux n'ont aucun client attribué...

    Merci à tous pour votre aide, et bonne soirée,
    Noirceuil

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Pourrais-tu te satisfaire d'un assignation en cycle ?

    C-à-d tu affectes :
    • le commercial 1 au client 1,
    • le commercial 2 au client 2,
    • le commercial 3 au client 3,


    • le commercial 1 au client 4
    • le commercial 2 au client 5,
    • le commercial 3 au client 6,


    • le commercial 1 au client 7,
    • et ainsi de suite.

    Ce serait plus simple qu'une attribution aléatoire.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,

    Merci pour ta réponse. Effectivement, sur le fond, c'est plus efficace.

    Par contre, je ne sais pas comment générer automatiquement les cycles, en sachant qu'il y a en moyenne 3 commerciaux par agence, et 200 agences.

    C'est pour ça que j'étais parti vers une attribution aléatoire, où au lieu de Max il y aurait une fonction (?) de sélection aléatoire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Max(Table1.CC) AS MaxDeCC, Table1.Agence, Table2.Id
    FROM Table2 INNER JOIN Table1 ON Table2.Agence = Table1.Agence
    GROUP BY Table1.Agence, Table2.Id;

    Mais s'il était possible de m'aider à générer l'assignation en cycle, ce serait très sympa ! Merci beaucoup.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 365
    Points : 23 835
    Points
    23 835
    Par défaut
    Je n'ai pas bien saisi la configuration : tu as 3 commerciaux par agences soient 600 personnes environ ou tu as 3 personnes qui s'occupent de 200 agence ?

    Pour ce qui est de généré l'association en cycle ce n'est pas bien difficile avec 2 boucles inbriquées.

    Je suppose que tu as 600 commerciaux et qu'aucun commerciaux ne travaille pour plusieurs agences et que tu ne souhaites pas garder une trace temporelle des assignation de tes commerciaux.

    Table Commercial
    ClefCommercial
    ClefAgence
    Autres Infos

    Table Agence
    ClefAgence
    Autres Infos

    Table Client
    ClefClient
    ClefAgence
    ClefCommercial
    Autres Infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    private sub AssignerClientToutesAgences()
      dim db as dao.database:set db=currentdb
      dim r as dao.recordset:set r = db.openrecordset("Agence")
     
      do while not r.eof
         call AssignerClientCyclique(r![ClefAgence])
         r.movenext
      loop
     
      r.close;set r=nothing
      db.close:set db=nothing :'Fait le ménage dérière toi
    end sub
    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
     
    private sub AssignerClientCyclique(prmClefAgence as long)
     
      dim db as dao.database:set db=currentdb
      dim rCom as dao.recordset:set rCom = db.openrecordset("SELECT * from Commercial where [clefAgence]=" & prmClefAgence) : 'Tu peux trier tes cormerciaux si cela a du sens pour toi et tu peux utiliser une requête paramétrée au lieu de SQL dans le code.
      dim rClient as dao.recordset:set rClient=db.openrecordset("SELECT * from Client where [clefAgence]=" & prmClefAgence) : 'Tu peux trier tes clients si cela a du sens pour toi.
     
      if rCom.eof then
        msgbox "Aucun commercial défini pour l'agence " & prmClefAgence
        goto Exit_AssignerClientCyclique
      end if
     
      do while not rClient.eof
     
         if rCom.eof
           rCom.moveFirst :'S'il n'y a plus de commercial, reprend la liste au début.
         end if
     
         rClient.edit
         rClient![ClefComercial]=rCom![clefCommercial] :'Assigne le commercial courrant au client
         rClient.update
         rClient.movenext
     
         rCom.moveNext
      loop
     
    Exit_AssignerClientCyclique
     
      rClient.Close:set rClient=nothing
      rCom.close:set rCom=nothing
      db.close:set db=nothing :'Fait le ménage dérière toi
    end sub
    Code à mettre dans un module et a exécutre directement. Je ne pense pas que tu voudra le faire plus d'une fois.

    Quelle que soit la méthode d'attribution, penses à expliquer comment l'attribution a été faites, certains commerciaux ont des égos gros comme des montagnes et pourraientt mal prendre qu'un de leur collègue se voit attribuer 'Leurs' clients.

    Peut-être devrais-tu voir s'il ne faudrait pas travailler par secteur géographique aussi. Si tes commerciaux ont a se déplacer chez les clients cela peut avoir de l'importance.

    A+

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup ! Je vais tester dans le détail ce mardi.

    Il y a bien effectivement 600 commerciaux, et aucun ne travaille pour plusieurs agences. Par contre, j'ai été un peu imprécis dans ma présentation, car en l'occurrence il s'agit de prospects et non de clients, donc ils ne sont attribués à personne pour l'instant. Concernant les zones géographiques, les prospects ont été attribués aux agences en fonction de leur domicile ; il ne restait qu'à les affecter au bon commercial, grâce aux codes que tu m'as indiqués.

    Merci encore, et bonne soirée,

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

Discussions similaires

  1. [ArcView 3.x] Etude d'accès à l'eau: Implanter de nouvelles agences pour des clients
    Par seanp223 dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 03/12/2010, 08h07
  2. [MySQL] Aide requête MySQL : sélection aléatoire d'un enregistrement avec critère
    Par iwf-fr dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/05/2007, 09h01
  3. requete de sélection aléatoire distincte
    Par calitom dans le forum Langage SQL
    Réponses: 9
    Dernier message: 21/12/2006, 17h59
  4. [MySQL] Sélection aléatoire sans doublon
    Par krapoulos2006 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 20/12/2006, 16h46
  5. Sélection aléatoire d'une seule ligne.
    Par Pat bol 002 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 05/01/2005, 19h30

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