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

MS SQL Server Discussion :

[SQL-Server] Comment émettre une condition sur une colonne créé dans un Select?


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut [SQL-Server] Comment émettre une condition sur une colonne créé dans un Select?
    Salut à tous

    Je cherche à faire quelque chose de simple (me parait il) mais je n'y arrive pas!!
    J'ai une table, sur laquelle je fais un select, mais dans ce select, je créé une nouvelle colonne (pas physiquement dans la table, maios dans le résultat de mon SELECT)... voici un exemple (simplifié) du SELECT en question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT *,(CASE WHEN secu LIKE '1%' THEN 'Homme' ELSE 'Femme' END) as genre  FROM customer WHERE genre = 'Homme'
    Vous voyez, la colonne 'genre' est ajouté au résultat... Mais je ne peux pas faire une condition sur cette colonne!! Sur le Web, j'ai en effet vu qu'il n'était pas possible de faire réfénrece à un alias de colonne dans la clause WHERE ...
    Et dans une clause HAVING éventuelle, en MySQL, ça marche, mais pas en SQL-Server...

    Voyez-vous une solution alternative??

  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 847
    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 847
    Points : 52 961
    Points
    52 961
    Billets dans le blog
    6
    Par défaut
    vous ne pouvez pas car les données n'existent pas. C'est logique et normatif !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *,
           CASE 
              WHEN secu LIKE '1%' THEN 'Homme' 
              ELSE 'Femme' 
           END AS genre
    FROM customer 
    WHERE genre = 'Homme'
    vous avez intérêt à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT *,
           CASE 
              WHEN secu LIKE '1%' THEN 'Homme' 
              ELSE 'Femme' 
           END AS genre
    FROM customer 
    WHERE secu LIKE '1%'
    mais vous pouvez faire sale et lent (ce que doit faire MySQL sans vous le dire...) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT *
    FROM   (SELECT *,
                   CASE 
                      WHEN secu LIKE '1%' THEN 'Homme' 
                      ELSE 'Femme' 
                   END AS genre
            FROM customer) AS T
    WHERE T.genre = 'Homme'
    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...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut Merci, parfait!
    Merci pour cette réponse claire, et professionnelle SQLpro! Je comprends le principe des deux solutions, et je n'y avais pas pensé naturellement...
    Et aussi l'avantage de la premiere sur la seconde.. Enfin merci à vous, vous tenez bien votre pseudo si je peux me permettre

  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
    21 847
    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 847
    Points : 52 961
    Points
    52 961
    Billets dans le blog
    6
    Par défaut
    pas de quoi !

    Mais pensez à mettre le tag résolu...

    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...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. [AC-2010] mettre une condition sur une chaine de caractères dans une requête sql
    Par freeman3869 dans le forum VBA Access
    Réponses: 1
    Dernier message: 05/06/2015, 11h45
  2. Réponses: 5
    Dernier message: 19/07/2011, 17h11
  3. Réponses: 8
    Dernier message: 16/05/2007, 21h16
  4. [SQL-SERVER 2000] Problème de requête sur une seule ligne
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 16h54
  5. Comment mettre un label sur une image
    Par dug dans le forum MFC
    Réponses: 3
    Dernier message: 07/04/2004, 10h40

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