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 :

[SQL2K] [SQL] Instruction IF dans select


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 5
    Par défaut [SQL2K] [SQL] Instruction IF dans select
    Bonjour,

    Est il possible de faire dans un select quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Select Champ1,
    
    If Type_Client = 0 then
     (select Nom from Table_ClientA  where id_client = c.id_client) as client
    else
     (select Nom from Table_ClientB  where id_client = c.id_client) as client
    end,
    
    Champ2, Champ3 From MaBase
    Je dois recuperer le nom du client dans une table qui n'est pas la meme, elle depend du champ Type_Client.

    D'avance merci de votre aide,
    Jean-Michel

  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 995
    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 995
    Billets dans le blog
    6
    Par défaut
    IF n'existe pas dans la langage SQL. En revanche il existe la structure CASE.
    A lire : http://sqlpro.developpez.com/cours/sqlaz/select/#L7

    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 candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    IF n'existe pas dans la langage SQL.
    !!!!

    http://msdn.microsoft.com/fr-fr/library/ms182717.aspx

  4. #4
    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
    Par défaut
    Bonjour,

    Na, le lien que vous proposez montre l'utilisation d'un contrôle de flux IF ... ELSE qui n'est pas du SQL mais du T-SQL, l'implémentation SQL de Microsoft et Sybase, entre autres

    La requête pourrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT Colonne1,
    		CASE Type_Client
    			WHEN 0 THEN A.Nom
    			ELSE B.Nom
    		END,
    		Colonne2,
    		Colonne3			
    FROM MaBase.dbo.maTable AS T
    LEFT JOIN dbo.Table_ClientA AS A
    	ON T.id_client = A.id_client
    LEFT JOIN dbo.Table_ClientB AS B
    	ON T.id_client = B.id_client
    Veillez à :
    - utiliser la balise [CODE] (bouton #)
    - qualifier les objets (tables, vues, procédures stockées, fonctions, ...)que vous spécifiez dans vos requêtes par le nom du schéma auquel ils appartiennent
    - éviter les jointures triangulaires
    - modéliser correctement votre schéma de données : une table de clients doit être unique à votre système d'information !
    - faire la différence entre un champ et une colonne

    @++

  5. #5
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Par défaut
    Le IF Fonctionne sous 2000 mais dans un SELECT il faut effectivement utiliser le CASE.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Si Type_Client n'a que deux valeurs, tu peux fare une view

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE VIEW vMaView
    AS
    select 0 AS Type_Client, id_client, Nom as client from Table_ClientA
    UNION
    select 1 AS Type_Client, id_client, Nom as client from Table_ClientB
    Et pour usage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT client FROM vMaView
    WHERE Type_Client = @Type_Client 
    AND id_client = @id_client

Discussions similaires

  1. [t-sql] instruction CASE dans clause WHERE
    Par ignitionflip dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/01/2007, 18h07
  2. [Sql]affectation d'un champ dans select
    Par boulaxx dans le forum Oracle
    Réponses: 1
    Dernier message: 03/08/2006, 15h55
  3. [SQL] Eviter doublons dans un select (sans DISTINCT)
    Par renaud26 dans le forum PHP & Base de données
    Réponses: 40
    Dernier message: 11/07/2006, 17h07
  4. [SQL] Moteur de recherche problème affichage donnée dans select
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 07/04/2006, 20h27
  5. [SQL-SERVER 2000] Remplacer l'instruction GO dans requete
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 05/04/2006, 14h24

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