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

Développement SQL Server Discussion :

Colonne compteur dynamique au sein d'une requête


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 70
    Points : 55
    Points
    55
    Par défaut Colonne compteur dynamique au sein d'une requête
    Bonjour,

    Au sein d'une procédure stockée, je crée une table temporaire.

    Je voudrais ajouté une colonne compteur automatique au sein de cette table temporaire.

    Puis je le faire dans la requête qui rempli la table ?

    Du genre :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DECLARE @cpt int;
    SET @cpt = 0;
     
    CREATE TABLE #toto (cpt int, libelle varchar(100));
     
    INSERT INTO #toto (cpt, libelle) SELECT (SELECT @cpt = @cpt +1), t.libelle FROM t_libelle t;

    Bien sur mon code ne fonctionne pas car je ne peux faire de (SELECT @cpt = @cpt +1).

    Quelle est la sntaxe correcte ?

    D'avance merci

    Sinon je peux toujours ajouter une colonne autoincrémentée à ma table temporaire, mais j'aimerai savoir si dans la requête c'est possible..

    Bonne journée

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Si tu peux définir un ordre sur ta sélection, tu peux utiliser la fonction de fenêtre row_number()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT row_number() over(order by libelle), libelle
    FROM t_libelle

  3. #3
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 213
    Points
    213
    Par défaut
    pk tu ne fais pas simplement une colonne de type identity(1,1) ?

    je l'utilise souvent et ça marche très bien

    pour reprendre le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TABLE #toto (cpt int identity(1,1), libelle varchar(100));
     
    INSERT INTO #toto (libelle) SELECT t.libelle FROM t_libelle t;

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    bonjour oadin, bonjour pacmann,

    merci pour vos réponses.

    pacmann :
    Je ne connaissais pas row_number() en effet c'est intéressant

    oadin:
    effectivement, merci, c'est ce que j'ai utilisé en attendant, mais je souhaiterais savoir par curiosité si dans une requête sql c'est possible.
    Par exemple dans le même genre, il arrive qu'on utilise un CASE dans une requête select pour faire ensuite un tri selon la colonne ajoutée (case). Et bien , je voudrais savoir si c'est possible dans le même genre, de faire quelque chose comme ça pour avoir un compteur de lignes dans la requête SQL elle même

  5. #5
    Membre actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 193
    Points : 213
    Points
    213
    Par défaut
    j'ai peur de ne pas avoir bien compris la question,

    Pour numéroter simplement une ligne selon son ordre d'insertion, l'identity reste le plus standard.

    SI tu veux avoir un numéro de ligne mais pas a tout les coup sur une table et ou le numéro de ligne change en fonction de l'ordre dans lequel tu renvois tes lignes, il faut voir du coté des fonctions de fenêtrages : row_number, dense, dense_rank et je sais plus la dernière.

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    salut oadin,

    Ok merci. Je cromprends..

    En fait je me disais que si je ne voulais pas passer par une table temporaire, comment j'aurai fait..

    Donc, j'en conclu que d'ajouter un compteur de lignes au sein d'une requête directement (pour avoir une colonne d'identité auto-généré et sans passer par une table temporaire) ne se fait pas, et qu'on passe plutôt par les fonctions que tu m'a cité.

    Je te remercie grandement

    Je mets résolu

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    .. ah mais je suis très bête..
    J'avais pas pris la peine d'aller voir la doc sur row_number et j'avais mal compris ce que me disais pacmann..

    Donc j'oublie. La réponse que je recherchais était celle de pacmann.

    Merci !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/09/2011, 15h30
  2. Déclaration au sein d'une requête
    Par casavba dans le forum SQL
    Réponses: 11
    Dernier message: 14/05/2008, 20h24
  3. [sql server]2 colonnes identiques lors du résultat d'une requête.
    Par maxlegrand dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/06/2007, 22h59
  4. Réponses: 3
    Dernier message: 05/09/2006, 15h59
  5. Réponses: 6
    Dernier message: 20/06/2006, 14h49

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