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 :

Ajout d'une colonne au résultat d'une requête Select


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Ajout d'une colonne au résultat d'une requête Select
    Bonjour,

    J'ai une requête simple type select content_texte from Content qui me renvoie 9 lignes.

    Je souhaite ajouter au résultat obtenu une nouvelle colonne avec par exemple une clé primaire pour que chaque ligne puisse être identifiée par l'integer de la clé primaire.

    Je souhaite en effet pouvoir sélectionner les lignes où la clé primaire est entre 0 et 4, puis sélectionner les lignes où la clé primaire est entre 5 et 8, puis celle où la clé est entre 9 et 13, ce qui devrait me constituer 3 ensembles de contenus.

    Je travaille avec SQL Server donc Limit ne fonctionne pas.

    La commande suivante ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE (select content_text from Content) as Essai
    ADD Primary Key (pk_id)
    Le résultat de mon select n'est donc pas une table ? Une erreur de syntaxe ? j'en ai essayé plusieurs avant de poster.

    Est-il tout simplement possible de rajouter une colonne au résultat d'une requête pour que chaque ligne soit identifiée par un entier et de façon incrémentale ?

    Merci pour votre aide et vos réponses

    Emmanuel

  2. #2
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Le résultat d'un select n'est pas une table tu ne pourras donc pas faire un ALTER TABLE.

    Tu n'as pas de clé primaire dans ta table content ?

    Sinon il faut que tu regarde du côté de rowid.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Faites comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT content_texte
         , row_number() over(order by content_texte) as rn
      FROM Content;
    Attention la valeur n'est valide que pendant l'exécution de la requête.

  4. #4
    Candidat au Club
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Merci lola
    Lola,

    J'ai bien une clé primaire pour ma table content mais ce n'est pas exploitable. Les valeurs renvoyées ne sont malheureusement pas une suite 1 - 2 - 3 etc ..

    Par contre je viens d'essayer avec ta recommandation Row_Number() et là j'obtiens exactement le résultat que je cherchais.

    Encore merci.

    PS : Merci Waldar également. La réponse de lola m'a permis de trouver cette commande Row_Number() dont tu parles.
    Le fait que ces valeurs soient temporaires me convient.

  5. #5
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Citation Envoyé par Namm Comm Voir le message
    Bonjour,

    J'ai une requête simple type :

    select content_texte from Content

    Qui me renvoie 9 lignes

    Je souhaite ajouter au résultat obtenu une nouvelle colonne avec par exemple une clé primaire pour que chaque ligne puisse être identifiée par l'integer de la clé primaire.
    Comment est-ce que ça pourrait être une clé primaire alors qu'il s'agit du résultat d'une requête ? Une clé primaire définit un identifiant pour une table (sur laquelle on peut donc assurer l'unicité). Le résultat d'une requête n'est pas une table !
    Vous pouvez toujours rajouter un rownumber() qui vous permettra d'identifier les lignes résultantes de votre requête - telle qu'exécutée cette fois-ci. Mais attention, sans un ordre absolu sur les résultats de votre requête, rien ne garantit que la même requête assigne le même rownumber à une même ligne (de toute façon, rien ne garantit que la même requête renvoie le même résultat, les tables ont pu changer).

  6. #6
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Le résultat de mon select n'est donc pas une table ?
    Non, jamais. Effectivement vous confondez ce qu'est une table, et ce qu'est le résultat d'un requête.
    Pour faire simple, dans une table, chaque ligne représente une occurrence d'une entité ou d'une relation (ceci n'est pas absolument vrai quand on passe du modèle conceptuel de données au modèle physique de données, mais je simplifie pour l'explication).
    Donc dans votre cas, chaque ligne de la table Content représente un contenu, et une seule occurrence de ceux-ci.

    Le résultat d'une requête est aussi un ensemble de lignes, mais la similitude s'arrête là : en effet dans une requête, on peut retourner toutes les colonnes ou toutes les lignes de la table, mais aussi seulement certaines colonnes (il suffit de les énumérer), ou certaines lignes de cette table (en filtrant avec une clause WHERE), ou encore des agrégats (avec la clause GROUP BY), et il existe encore bien d'autres exemples.
    En plus de cela et de la même façon, on peut retourner un sous-ensemble de lignes décrit par seulement certaines colonnes de plusieurs tables, dont l'ensemble n'a de sens que par jointure (JOIN).

    Une erreur de syntaxe ?
    La table dbo.Content n'a-t-elle pas de clé primaire pour l'instant ?
    Pouvez-vous générer le script de définition de la table ?



    Est-il tout simplement possible de rajouter une colonne au résultat d'une requête pour que chaque ligne soit identifiée par un entier et de façon incrémentale ?
    Oui, il suffit de rajouter le nom de ladite colonne dans la liste des colonnes de la clause SELECT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT pk_id, content_texte FROM dbo.Content
    @++

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/12/2012, 10h09
  2. [XL-2003] Trier une colonne de moyenne, rattachée à une colonne de noms
    Par floctc dans le forum Excel
    Réponses: 3
    Dernier message: 11/03/2011, 09h57
  3. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  4. Réponses: 2
    Dernier message: 20/02/2008, 18h08

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