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 :

Numérotation multiple sur une même table


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Numérotation multiple sur une même table
    Bonjour,

    Je cherche depuis hier et malheureusement sans succès une réponse à ma problématique. Je souhaiterais pourvoir numéroter des lignes mais que la numérotation reprenne à 1 pour chaque changement de groupe.

    exemple de données :

    CODSEC,CODFAM
    101,10101
    101,10101
    101,10104
    101,10104
    103,10301
    103,10304
    avec la requête :

    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
    Alter table RNGFAM_TMP1 add column compteur integer default 0;
     
    SET @compteur=0; 
     
    INSERT INTO RNGFAM_TMP1(
    CODSEC,
    CODFAM
    ) 
    SELECT DISTINCT 
    CODSEC,
    CODFAM
    FROM classement;
     
     
    update RNGFAM_TMP1
    set compteur=@compteur:=@compteur+1;
    j'obtiens

    CODSEC,CODFAM, compteur
    101,10101,1
    101,10104,2
    103,10301,3
    103,10304,4
    Je souhaiterais obtenir le résultat suivant :

    CODSEC,CODFAM, compteur
    101,10101,1
    101,10104,2
    103,10301,1
    103,10304,2
    donc qu'à chaque changement de CODSEC, le compteur redémarre à 1.

    Merci par avance pour votre aide

  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
    19 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 19 513
    Points : 46 174
    Points
    46 174
    Par défaut
    Inutile de faire tout ce bataclan, ceci peut se faire à la volée dans la requête avec une fonction de fenêtrage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT *, ROW_NUMBER() OVER(PARTITION BY CODSEC ORDER BY CODFAM) AS Compteur
    FROM   classement;
    A lire sur les fonctions de fenêtrage : http://sqlpro.developpez.com/article...clause-window/

    Et pour apprendre le SQL, lisez mon livre et parcourez mon site !

    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  3. #3
    Futur Membre du Club
    Inscrit en
    mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci j'avais déjà essayé mais le fenetrage n'est pas disponible sur Mysql, j'aurais bien évidemment dû préciser...

    Désolée,

  4. #4
    Rédacteur
    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    mai 2002
    Messages
    19 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : mai 2002
    Messages : 19 513
    Points : 46 174
    Points
    46 174
    Par défaut
    ça n'est pas possible de faire sans, car en cas de doublons, la numérotation est faussée; C'est pour cela que la norme SQL à rajouter ces fonctions depuis la version 1999 !

    Bref passez à un vrai SGBD Relationnel au lieu de cet ersatz !

    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...
    * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *

  5. #5
    Futur Membre du Club
    Inscrit en
    mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Effectivement, Mysql ne m'a permis d'avoir le résultat escompté, j'ai donc traité ma table sous POSTGRESQL avec succès.

    Merci,

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

Discussions similaires

  1. Multiple SELECT sur une même TABLE
    Par anto2b dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/08/2012, 11h24
  2. Jointures multiples sur une même table
    Par hjhjhj dans le forum Langage SQL
    Réponses: 10
    Dernier message: 08/05/2009, 17h48
  3. Accès multiple sur une même table
    Par ravaid dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/04/2008, 15h09
  4. Accès multiple sur une même table
    Par ravaid dans le forum Développement
    Réponses: 3
    Dernier message: 18/04/2008, 14h27
  5. jointure sur une même table
    Par guillaumeVb6 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/09/2004, 16h08

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