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

VBA Access Discussion :

Enregistrements en double/SQL Imbriqué [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juillet 2010
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juillet 2010
    Messages : 142
    Par défaut Enregistrements en double/SQL Imbriqué
    Bonjour,

    Je reviens vers le forum pour demander de l'aide sur un programme que je souhaiterais mettre en place.

    Je ne sais pas pourquoi j'ai l'impression d'etre dans une inception en voulant excuter mon code!

    Donc:
    J'ai une tableInitiale(Code,Pays,Ville,Cos,Vol,)
    Une une autre table tableDestination(Code
    (Remarquons ici que la tableInitiale n'a pas de clé primaire, contraitement à tableDestination)

    Cette requete me permet de faire un SUM, MAX et un regroupement (je vais l'appeller A:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Code,Pays,Ville, Sum([Cos]), Max([Vol]) FROM tableInitiale GROUP BY Code,Pays,Ville;
    Jusque la, c'est cool.
    Petit probleme rencontré à ce niveau la, il y'a bel et bien des code en double, la seule variable qui change est Ville.

    Je fais une requete imbriqué pour connaitre mes doublons (je vais l'appeller B)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Code,COUNT (Code) as nbre  FROM ( SELECT Code,Pays,Ville, Sum([Cos]), Max([Vol]) FROM tableInitiale GROUP BY Code,Pays,Ville) GROUP BY Code;
    J'ai par la suite, pour chaque code, le nombre de fois qu'il est redondant.

    Donc pour l'instant, j'ai 2 table temporaire de 2 recordSet differents.

    Ceci est faisable dans le cas d'une table disons non temporaire.

    Mon souhait est le suivant :
    Prendre les codes de la requete A, faire des tests pour que SI ce code est redondants dans la requete B, le modifier pour qu'on ai :
    Pour le Code 123 redondant par exemple 3 fois on aura :
    123X
    123XX
    123XXX

    et en fin de compte, inserer les données dans la table destination ..
    Voila ...

    Actuellement, je fais ceci à travers une table temporaire, mais comme ça me bouffe un peu de place memoire, je me suis dis que si le travail s'effectuait qu'au niveau des requetes, ça serait un peu plus rapide ...

  2. #2
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    J'ai une solution en plusieurs étape.

    Ajouter deux champs à la table tableInitiale:
    bDoublon (Oui/Non)
    nDoublon (Numérique - Entier long)

    Créer une requête R_CLE_CPV:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DISTINCT tableInitiale.Code, tableInitiale.Pays, tableInitiale.Ville
    FROM tableInitiale;
    Cette requête sert à faciliter la gestion des doublons. CPV est un acronyme pour Code-Pays-Ville.


    Etape 1 - on blanchit les champs bDoublon et nDoublon
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE tableInitiale SET tableInitiale.bDoublon = False, tableInitiale.nDoublon = Null;

    Etape 2 - on marque les doublons
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE tableInitiale SET tableInitiale.bDoublon = True
    WHERE (((tableInitiale.Code) In (SELECT [Code] FROM [R_CLE_CPV] As Tmp1 GROUP BY [Code] HAVING Count(*)>1)));

    Etape 3 - on affecte un numéro d'ordre aux doublons
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE tableInitiale
    SET tableInitiale.nDoublon = DCount("*","R_CLE_CPV","[Code]='" & tableInitiale.[Code] & "' AND ([Pays] & [Ville])<='" & Replace(tableInitiale.[Pays],"'","''") & Replace(tableInitiale.[Ville],"'","''") & "'")
    WHERE (((tableInitiale.bDoublon)=True));

    Etape 4 - on modifie le champ code
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE tableInitiale SET tableInitiale.Code = [Code] & String([nDoublon],"X")
    WHERE (((tableInitiale.nDoublon)>0));

    A+

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

Discussions similaires

  1. Pb lecture enregistrement table liée SQL SERVER
    Par christellel198 dans le forum Access
    Réponses: 3
    Dernier message: 25/10/2005, 09h34
  2. Recuperer un enregistrement de requete SQL dans une variable
    Par kleenex dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 14/09/2005, 15h59
  3. [Forms] : enregistrement en double
    Par Aminos dans le forum Forms
    Réponses: 5
    Dernier message: 27/01/2005, 17h36
  4. Regroupement d'enregistrements en ASP/SQL Server
    Par Matlight dans le forum ASP
    Réponses: 3
    Dernier message: 02/04/2004, 13h31

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