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 :

[Access] création d'une colonne avec un numéro d'occurence


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 20
    Points
    20
    Par défaut [Access] création d'une colonne avec un numéro d'occurence
    Bonjour à tous,

    Le probleme :
    J'ai une table Acces contenant entre autres un champs nom.
    Certains noms sont en double, triple, etc

    TABLE INITIALE :
    nom
    Alain
    Dupont
    Alain
    Georges
    Georges
    Durant
    Alain

    Je voudrai crer une colonne sup avec un numéro d'occurence :
    TABLE FINALE
    nom numoccurs
    Alain 1
    Dupont 1
    Alain 2
    Georges 1
    Georges 2
    Dupont 2
    Alain 3

    Variantes possibles aussi : travailler sur la table trié ou bien crer une nouvelle table.

    Je me casse les dents sur ce pb depuis 2 jours !

    Si quelqu'un a une solution...

  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 862
    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 862
    Points : 53 008
    Points
    53 008
    Billets dans le blog
    6
    Par défaut
    Il suffit de faire une requete. Ne pas stocker cela dans une colonne !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT NOM, COUNT(*) AS NOMBRE
    FROM   MaTable
    GROUP BY NOM
    A +

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 20
    Points
    20
    Par défaut Pas ce probleme
    Merci mais cela ne répond pas au probléme posé .

    Je ne cherche pas à trouver le nombre d'ocurence mais à affecter à chacun un numéro d'occurence. C'est pour cela que j'avais donné un exmple détaillé avant - après.

    Sous oracle j'aurai pu faire un curseur ou un truc comme ça.

    En sql seul ???

  4. #4
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pour pouvoir donner un tel numéro il faudra pouvoir trier les données. Or là avec un seul champs, je ne vois pas comment différencier Alain de Alain et encore même Alain. Comment savoir lequel est le premier ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 20
    Points
    20
    Par défaut
    La table comporte d'autres champs dont un champs numauto qui sert d'index.
    et donc deux noms identiques sont bien differenciables.

    Pour savoir qui est le premier par exemple de trois Alain dans la table, le champ numauto les classe.

    S'il le faut, je peux commencer par trier la table sur les noms, ce n'est pas un probléme.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 862
    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 862
    Points : 53 008
    Points
    53 008
    Billets dans le blog
    6
    Par défaut
    Il serait donc bon que vous respectiez la charte de postage afin d'éviter de nous faire perdre du temps !

    A lire donc :
    http://www.developpez.net/forums/showthread.php?t=944

    A +

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 20
    Points
    20
    Par défaut
    Désolé !

    Je n'avais pas bien lu mais ... je n'étais pas le seul !

    Je vais donc modifier ma question en ajoutant les create table etc.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 20
    Points
    20
    Par défaut
    Voila et encore désolé !

    Creation de la table :
    CREATE TABLE CLIENTS (
    ID_CLIENT COUNTER,
    NOM CHAR(25),
    CONSTRAINT CLIENT PRIMARY KEY( ID_CLIENT ));
    Insertion des données :
    INSERT INTO CLIENTS (NOM) VALUES ('andrée');
    INSERT INTO CLIENTS (NOM) VALUES ('andrée');
    INSERT INTO CLIENTS (NOM) VALUES ('alain');
    INSERT INTO CLIENTS (NOM) VALUES ('alain');
    INSERT INTO CLIENTS (NOM) VALUES ('alain');
    INSERT INTO CLIENTS (NOM) VALUES ('julie');
    INSERT INTO CLIENTS (NOM) VALUES ('alain');
    INSERT INTO CLIENTS (NOM) VALUES ('andrée');
    Résutat final désiré :
    Ajout d'une colonne avec le numéro d'occurences de chaque homonyme.
    ID_CLIENT...NOM.............NUMOCCURS
    1...............andrée................1
    2...............andrée................2
    3...............alain...................1
    4...............alain...................2
    5...............alain...................3
    6...............julie....................1
    7...............alain...................4
    8...............andrée................3

  9. #9
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 102
    Points : 28 401
    Points
    28 401
    Par défaut
    Une manière de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select t1.id_client
     , t2.nom
     , count(*) as occurs
    from clients as t1
     inner join
      clients as t2
      on t1.nom =  t2.nom
      and t1.id_client >= t2.id_client
    group by t1.id_client, t1.nom

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 20
    Points
    20
    Par défaut
    Merci.

    Ca fonctionne nickel mais il faut changer dans le group by t1.nom en t2.nom

    Je vais essayer d'écrire le update maintenant.

    SELECT t1.id_client
    , t2.nom
    , count(*) AS occurs
    FROM clients AS t1
    INNER JOIN
    clients AS t2
    ON t1.nom = t2.nom
    AND t1.id_client >= t2.id_client
    GROUP BY t1.id_client, t2.nom

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/02/2015, 10h50
  2. [Toutes versions] Calcul des 10 derniers numéros d'une colonne avec décal des nombres 1 fois sur 2
    Par MP5078 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 10/07/2012, 12h04
  3. Requête pivot avec création d'une colonne "total"
    Par minijim dans le forum Langage SQL
    Réponses: 7
    Dernier message: 10/11/2010, 21h09
  4. Réponses: 3
    Dernier message: 22/10/2006, 23h15
  5. [Access] Nom d'une table avec un espace dans SQL
    Par Corsaire dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/04/2006, 15h50

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