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 :

Utiliser un alias de colonne dans une clause Where MS SQL


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2005
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Utiliser un alias de colonne dans une clause Where MS SQL
    Bonjour à tous,

    Est-il possible d'utiliser un alias de colonne dans une clause WHERE tel que:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT mon_champ AS mon_alias 
    FROM ma_table 
    WHERE mon_alias = 'ma_valeur'
    Et dans un clause HAVING ?

    PS: j'ai cherché une réponse dans ce forum mais je n'ai rien trouvé.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    De mémoire il me semble que non (en tout cas ça ne fonctionne pas sous IB 6) :
    j'ai lu un article récemment à ce sujet sur le site de SQLpro mais je ne sais plus trop où (regarde du côté de GROUP BY, HAVING, etc.)

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 115
    Points : 125
    Points
    125
    Par défaut
    je crois que les alias sur les champs sont utilisés pour l'affichage

    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom as toto from table
    et ca va te retourner dans l analyser un tableau avec toto comme nom de colonne. En tout cas je sais que c'est faisable mais je ne sais pas si la méthode est bonne.

    les as sont utilisé en générale sur les nom de table appelé je crois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     select * from toto as a,  titi as b where a.champ = b.champ
    avec ptet une inversion de a et champ

    je sais pas si je t ai aidé [/code]

  4. #4
    Membre averti

    Inscrit en
    Août 2005
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 220
    Points : 364
    Points
    364
    Par défaut Alias des champs
    Je confirme:

    Les alias des tables sont utilisables dans les WHERE, HAVING et autres.

    Les alias des champs ne sont pas utilisables dans les mêmes WHERE, HAVING et autres. Comme le dit etarip, ils ne servent qu'a renommer un champ dans le "tableau" de résultats (mais utilisables par la suite dans un Recordset par exemple)

  5. #5
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut Re: Utiliser un alias de colonne dans une clasue Where MS SQ
    Citation Envoyé par sir dragorn
    Est-il possible d'utiliser un alias de colonne dans une clause WHERE tel que:
    SELECT mon_champ AS mon_alias FROM ma_table WHERE mon_alias = 'ma_valeur'
    Avant de se demander si c'est possible, une 1ère remarque : dans ton exemple, ça n'a strictement aucun intérêt, non ? Tu peux simplement mettre Alors ça serait peut-être bien de nous dire que ce tu veux réellement faire ?

    Maintenant, dans on exemple ça ne peut pas marcher parce que l'alias est créé à la sortie de ta requête, donc après l'exécution de la clause WHERE.
    Par contre, si l'alias est créé dans une sous-requête, ça peut marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT Ma_Somme 
    FROM 
      (SELECT (Champ1 + Champ2) as Ma_Somme
       FROM MaTable)
    WHERE MaSomme > 1000
    Dans cet exemple encore, l'intérêt est à peu près nul, mais on doit pouvoir des exemples où c'est utile.

  6. #6
    Membre actif Avatar de TheRussian
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 200
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    que quelqu'un me corrige si je me trompe mais utiliser 'as' pour renommer un champ marche effectivement avec les requêtes imbriquées, et de plus sur certain SGBD on peut renommer la zone et l'utiliser avec la clause having, cela peut-être utile lors de l'utilisation de fonction particulièrement longue. (Mais je ne me souviens plus des SGBD peut-être DB2).

    @+

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut
    Bonjour

    J'ai le même souci, avec un exemple ou le nom est particulièrement utile : avec un decode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select decode(champ, etc ...) as "toto" 
    from matable
    where "toto" condition ...
    Cette requete ne marche pas sous Oracle10. J'ai essayé avec double-quotes et sans.

    Il y a t-il néanmoins un moyen ?

  8. #8
    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
    Vous avez la réponse, allez, vingt centimètres plus haut :
    Les alias des champs ne sont pas utilisables dans les mêmes WHERE, HAVING et autres.
    Une petite précision, les alias de colonne sont utilisables dans la clause ORDER BY.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 191
    Points
    191
    Par défaut
    ok tant pis
    (je reposais la question car je me disais que c'était peut etre devenu possible, 6 ans après).

  10. #10
    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
    C'est pas une histoire d'être possible ou pas, c'est l'ordre de parsing de la requête qui fait que la clause where est traitée avant la clause select.

    Pour permettre ce que vous demandez, il faudrait parser deux fois les requêtes, ce qui serait une perte de performances, alors qu'il existe deux contournements simples et non-coûteux :
    1. Recopier la formule du select dans le where
    2. Utiliser une sous-requête (voir message de rsc)

    Le choix de l'une ou l'autre des solutions dépend de la complexité de la formule.

  11. #11
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 170
    Points : 7 422
    Points
    7 422
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Loko Voir le message
    ok tant pis
    (je reposais la question car je me disais que c'était peut etre devenu possible, 6 ans après).
    Tu peux toujours passer par une sous-requête, ça ne devrait pas changer grand chose aux perfs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select c
    from (
    select c, decode(c, ...) as a, decode(c, ...) as b
    from ma table
    where c = 2
    )
    where a = b
    Sinon, il faut savoir que le SGBD n'est pas idiot : s'il y a la même chose dans deux clauses DECODE, alors il ne l'exécute qu'une fois, pour la seconde, il utilise directement le résultat.

  12. #12
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Sinon, il faut savoir que le SGBD n'est pas idiot : s'il y a la même chose dans deux clauses DECODE, alors il ne l'exécute qu'une fois, pour la seconde, il utilise directement le résultat.
    tu veux dire la fonction DECODE

Discussions similaires

  1. Utiliser un champ Oui/Non dans une clause WHERE ?!
    Par _MattU_ dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/06/2008, 13h32
  2. Utiliser des ALIAS de colonnes dans une jointure
    Par mbzhackers dans le forum SQL
    Réponses: 4
    Dernier message: 31/03/2008, 10h27
  3. [ASE]Utiliser timestamp dans une clause WHERE
    Par JeffK dans le forum Adaptive Server Enterprise
    Réponses: 14
    Dernier message: 03/12/2007, 12h34
  4. Utiliser une chaine de caractère dans une clause WHERE
    Par DanaX dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 15/05/2007, 12h02
  5. [SQL2K][TSQL] Peut-on utiliser un alias dans une clause Where ?
    Par StormimOn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 23/05/2006, 09h25

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